Python - 内置函数
Python - 内置函数
filter
filter(处理逻辑, 可遍历对象)遍历序列中的每个元素,判断每个元素的布尔值为True则保留元素.
用法:返回执行结果为TRUE的入参(入参是列表字符元组)
print filter(lambda x:x*x-4,range(10))
#结果:[0, 1, 3, 4, 5, 6, 7, 8, 9]
map
map(处理逻辑, 可遍历的对象) 处理序列中的每个元素, 元素个数及位置
与原来一样.用法:对列表入参依次执行函数。入参为列表,有多少个列表,就应该有多少个入参。
print map(lambda x:x*x-4,range(10))
#结果:[-4, -3, 0, 5, 12, 21, 32, 45, 60, 77]
print map(lambda x,y:x*y-4,range(3),[8,9,10])
#结果:[-4, 5, 16]
reduce
from funtools import reduce
reduce(函数, 序列, 默认空参数)处理一个序列, 然后把写进行合作操作
用法:先把sequence中第一个值和第二个值当参数传给function,再把function的返回值和第三个值当参数传给fuction,最终返回一个结果值
#接收的入参个数只能为2
print reduce(lambda x,y:x*y-4,range(4))
#结果:-40
#计算0到100的和
print reduce(lambda x,y:x+y, range(101))
#结果:5050
print reduce(lambda x,y:x+y, range(101),100)
#结果:5150
sort(cmp=None, key=None, reverse=False) 和 sorted(iterable, cmp=None, key=None, reverse=False)
sort是容器的函数,sorted是Python的内建函数相同的参数。
简单解释一下两函数:
sort(cmp=None, key=None, reverse=False)
sorted(iterable, cmp=None, key=None, reverse=False)
sort是容器的函数,sorted是Python的内建函数相同的参数。
cmp:用于比较的函数,比较什么由key决定,有默认值,迭代集合中的一项。cmp(e1, e2) 是带两个参数的比较函数, 返回值:
负数: e1 < e2,
0: e1 == e2,
正数: e1 > e2。
默认为 None, 即用内建的比较函数。
key:用列表元素的某个已命名的属性或函数(只有一个参数并且返回一个用于排序的值)作为关键字,有默认值,迭代集合中的一项。
reverse:排序规则,reverse = True 或者 reverse = False,有默认值。
-
对于一个无序的列表a,调用a.sort(),对a进行排序后返回a。
而对于同样一个无序的列表a,调用sorted(a),对a进行排序后返回一个新的列表,而对a不产生影响。>>> a=[1,3,5,2,9,4,7,8,6,0] >>> a.sort() >>> a [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> a=[1,3,5,2,9,4,7,8,6,0] >>> sorted(a) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> a [1, 3, 5, 2, 9, 4, 7, 8, 6, 0]
复杂点的
>>> list1=[(6,'cangjingkong',20),(4,'wutenglan',30),(7,'boduoyejiyi',25)]
>>> list1.sort()
>>> list1
[(4, 'wutenglan', 30), (6, 'cangjingkong', 20), (7, 'boduoyejiyi', 25)]
>>> list1=[(6,'cangjingkong',20),(4,'wutenglan',30),(7,'boduoyejiyi',25)]
>>> sorted(list1)
[(4, 'wutenglan', 30), (6, 'cangjingkong', 20), (7, 'boduoyejiyi', 25)]
>>> list1
[(6, 'cangjingkong', 20), (4, 'wutenglan', 30), (7, 'boduoyejiyi', 25)]
当list由tuple组成时,默认情况下,sort和sorted都会根据tuplp[0]作为排序的key进行排序
-
基于key函数排序:
>>> list1=[(6,'cangjingkong',20),(4,'wutenglan',30),(7,'boduoyejiyi',25)] >>> list1.sort(key=lambda employee : employee[2]) >>> list1 [(6, 'cangjingkong', 20), (7, 'boduoyejiyi', 25), (4, 'wutenglan', 30)] >>> list1=[(6,'cangjingkong',20),(4,'wutenglan',30),(7,'boduoyejiyi',25)] >>> sorted(list1,key=lambda employee : employee[2]) [(6, 'cangjingkong', 20), (7, 'boduoyejiyi', 25), (4, 'wutenglan', 30)] >>> list1 [(6, 'cangjingkong', 20), (4, 'wutenglan', 30), (7, 'boduoyejiyi', 25)]
-
基于cmp函数排序:
>>> list1=[(6,'cangjingkong',20),(4,'wutenglan',30),(7,'boduoyejiyi',25)] >>> list1.sort(cmp=lambda x,y : cmp(x[1],y[1])) >>> list1 [(7, 'boduoyejiyi', 25), (6, 'cangjingkong', 20), (4, 'wutenglan', 30)] >>> list1=[(6,'cangjingkong',20),(4,'wutenglan',30),(7,'boduoyejiyi',25)] >>> sorted(list1,cmp=lambda x,y : cmp(x[1],y[1])) [(7, 'boduoyejiyi', 25), (6, 'cangjingkong', 20), (4, 'wutenglan', 30)] >>> list1 [(6, 'cangjingkong', 20), (4, 'wutenglan', 30), (7, 'boduoyejiyi', 25)]
3.基于升序/降序排序:
>>> a=[1,3,5,2,9,4,7,8,6,0]
>>> a.sort(reverse=False)
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a.sort(reverse=Ture)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'Ture' is not defined
>>> a=[1,3,5,2,9,4,7,8,6,0]
>>> a.sort(reverse=False)
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a=[1,3,5,2,9,4,7,8,6,0]
>>> a.sort(reverse=True)
>>> a
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
>>> a=[1,3,5,2,9,4,7,8,6,0]
>>> sorted(a,reverse=False)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> sorted(a,reverse=True)
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
>>> a
[1, 3, 5, 2, 9, 4, 7, 8, 6, 0]
常用内置函数总结
一. 数学运算类型
abs(x)
求绝对值
1. 参数可以是整型, 也可以是复数
2. 若参数是复数, 则返回复数的模
complex([real[,imag]])
创建一个复数
divmod(a,b)
分别取商和余数
注意: 整型, 浮点型都可以
float([x])
将一个字符串或数转换为浮点数,如果五参数将返回0.0
int([x[,base]])
将一个字符转换为int类型,base表示进制
long([x[,base]])
将一个字符串转换为long类型
pow(x,y[,z])
返回x的一次幂
range([start],stop[,step])
产生一个序列, 默认从0开始
round(x[,n])
四舍五入
sum(iterable[,start])
对集合求和
oct(x)
将一个数字转化为8进制
hex(x)
将整数x转化为16进制字符串
chr(i)
返回整数i对应的ASCII字符
bin(x)
将整数转化为二进制字符串
bool([x])
将x转化为Boolean类型
二. 集合类操作
basestring()
str和unicode的超类
不能直接调用, 可以用作isinstance判断
format(value[,format_spec])
格式化输出字符串
格式化的参数顺序从0开始,如"I am {0},I like {1}"
unichr(i)
返回给定int类型的unicode
enumerate(sequence [, start = 0])
返回一个可枚举的对象,该对象的next()方法将返回一个tuple
>>>seasons = ['Spring', 'Summer', 'Fall', 'Winter']
>>> list(enumerate(seasons))
[(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]
>>> list(enumerate(seasons, start=1)) # 下标从 1 开始
[(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]
iter(0[,sentinel])
生成一个对象的迭代器,第二个参数表示分隔符
s = '软件是深圳的未来' #s是一个iterable对象,它有__getitem__()方法
it = iter(s) #it是一个iterator对象,它有 __next__()和__iter__()方法
print(s)
print(it.__next__())
print(it.__next__())
print(it.__next__())
print(it.__next__())
结果输出如下:
软件是深圳的未来
软
件
是
深
max(iterable[, args...][key])
返回集合中的最大值
min(iterable[, args...][key])
返回集合中的最小值
dict([arg])
创建数据字典
list([iterable])
将一个集合类转换为另外一个集合类
set()
返回新的集合对象。
>>>x = set('runoob')
>>> y = set('google')
>>> x, y
(set(['b', 'r', 'u', 'o', 'n']), set(['e', 'o', 'g', 'l'])) # 重复的被删除
>>> x & y # 交集
set(['o'])
>>> x | y # 并集
set(['b', 'e', 'g', 'l', 'o', 'n', 'r', 'u'])
>>> x - y # 差集
set(['r', 'b', 'u', 'n'])
>>>
frozenset([iterable])
产生一个不可变的set
str([object])
转换为string类型
tuple([iterable])
生成一个tuple类型
xrange([start], stop[, step])
xrange()函数与range()类似,但xrnage()并不创建列表,而是返回一个xrange对象,它的行为与列表相似,但是只在需要时才计算列表值,当列表很大时,这个特性能为我们节省内存
三. 逻辑判断
all(iterable)
1、集合中的元素都为真的时候为真
2、特别的,若为空串返回为True
any(iterable)
1、集合中的元素有一个为真的时候为真
2、特别的,若为空串返回为False
cmp(x, y)
如果x < y ,返回负数;x == y, 返回0;x > y,返回正数
四. 反射
callable(object)
检查对象object是否可调用
1、类是可以被调用的
2、实例是不可以被调用的,除非类中声明了__call__方法
classmethod()
1、注解,用来说明这个方式是个类方法
2、类方法即可被类调用,也可以被实例调用
3、类方法类似于Java中的static方法
4、类方法中不需要有self参数
compile(source, filename,mode[, flags[, dont_inherit]])
将source编译为代码或者AST对象。代码对象能够通过exec语句来执行或者eval()进行求值。
1、参数source:字符串或者AST(Abstract Syntax Trees)对象。
2、参数 filename:代码文件名称,如果不是从文件读取代码则传递一些可辨认的值。
3、参数model:指定编译代码的种类。可以指定为 ‘exec’,’eval’,’single’。
4、参数flag和dont_inherit:这两个参数暂不介绍
dir([object])
1、不带参数时,返回当前范围内的变量、方法和定义的类型列表;
2、带参数时,返回参数的属性、方法列表。
3、如果参数包含方法__dir__(),该方法将被调用。当参数为实例时。
4、如果参数不包含__dir__(),该方法将最大限度地收集参数信息
delattr(object, name)
删除object对象名为name的属性
eval(expression [, globals [, locals]])
计算表达式expression的值
execfile(filename [, globals [, locals]])
用法类似exec(),不同的是execfile的参数filename为文件名,而exec的参数为字符串.
getattr(object, name [, defalut])
获取一个类的属性
globals()
返回一个描述当前全局符号表的字典
hasattr(object, name)
判断对象object是否包含名为name的特性
hash(object)
如果对象object为哈希表类型,返回对象object的哈希值
isinstance(object, classinfo)
判断object是否是class的实例
issubclass(class, classinfo)
判断是否是子类
len(s)
返回集合长度
locals()
返回当前的变量列表699
memoryview(obj)
返回一个内存镜像类型的对象
next(iterator[, default])
类似于iterator.next()
object()
基类
property([fget[, fset[, fdel[, doc]]]])
属性访问的包装类,设置后可以通过c.x=value等来访问setter和getter
reload(module)
重新加载模块
setattr(object, name, value)
设置属性值
repr(object)
将一个对象变幻为可打印的格式
slice(start,end)
方法可从已有数组中返回选定的元素,返回一个新数组,包含从start到end(不包含该元素)的数组元素。
staticmethod
声明静态方法,是个注解
super(type[, object-or-type])
引用父类
type(object)
返回该object的类型
vars([object])
返回对象的变量,若无参数与dict()方法类似
bytearray([source [, encoding [, errors]]])
返回一个byte数组
1、如果source为整数,则返回一个长度为source的初始化数组;
2、如果source为字符串,则按照指定的encoding将字符串转换为字节序列;
3、如果source为可迭代类型,则元素必须为[0 ,255]中的整数;
4、如果source为与buffer接口一致的对象,则此对象也可以被用于初始化bytearray.
zip([iterable, ...])
>>>a = [1,2,3]
>>> b = [4,5,6]
>>> c = [4,5,6,7,8]
>>> zipped = zip(a,b) # 返回一个对象
>>> zipped
<zip object at 0x103abc288>
>>> list(zipped) # list() 转换为列表
[(1, 4), (2, 5), (3, 6)]
>>> list(zip(a,c)) # 元素个数与最短的列表一致
[(1, 4), (2, 5), (3, 6)]
>>> a1, a2 = zip(*zip(a,b)) # 与 zip 相反,zip(*) 可理解为解压,返回二维矩阵式
>>> list(a1)
[1, 2, 3]
>>> list(a2)
[4, 5, 6]
>>>
五. IO操作
file(filename [, mode [, bufsize]])
file类型的构造函数,作用为打开一个文件,如果文件不存在且mode为写或追加时,文件将被创建。添加‘b’到mode参数中,将对文件以二进制形式操作。添加‘+’到mode参数中,将允许对文件同时进行读写操作
1、参数filename:文件名称。
2、参数mode:'r'(读)、'w'(写)、'a'(追加)。
3、参数bufsize:如果为0表示不进行缓冲,如果为1表示进行行缓冲,如果是一个大于1的数表示缓冲区的大小 。
input([prompt])
获取用户输入
推荐使用raw_input,因为该函数将不会捕获用户的错误输入
open(name[, mode[, buffering]])
打开文件
与file有什么不同?推荐使用open
打印函数
raw_input([prompt])
设置输入,输入都是作为字符串处理
其他
help()--帮助信息
Python是什么?
python是运维晋升的一个趋势
python下载地址
https://www.python.org/downloads/
python解释器pycharm安装以及激活
http://idea.lanyus.com/ 获取验证码
#!/usr/bin/env python #_*_ coding:utf-8 _*_ # ** author: zhaobin # ** description: more function # ** createDate: 2018-8-13 # ** run python: python xxxx.py # *****************************
1.文件头
#!/usr/bin/env python #_*_ coding:utf-8 _*_
Linux下修改pip源方法如下: linux下,修改 ~/.pip/pip.conf (没有就创建一个), [global] timeout = 6000 index-url = http://pypi.douban.com/simple trusted-host = pypi.douban.com
2.python的文件可以是任意的后缀名
2.1、执行 Python 脚本的两种方式 直接调用python脚本,用python解释器去调用python脚本 2.2、简述位、字节的关系 一个字节是8位,计算机计算是以字节为单位,存储是以位单位 2.3、简述 ascii、unicode、utf-‐8、gbk 的关系 最先出现的是ascii编码,其次是unicode编码,又因为每个国家的标准不同,继而出现unicode的压缩编码utf-8。ascii码8位,unicode码16位。用ascii码表示的字符,再用unicode表示就会造成内存浪费,提出的utf-8编码,能用多少表示就用多少表示。 2.4、请写出 “李杰” 分别用 utf-‐8 和 gbk 编码所占的位数 Utf-8 中文一个字代表3个字节,占了6个字节 Gbk是一个代表2个字节,占了4个字节
3.单行注释: # 注释内容
多行注释:"""注释内容"""
4变量的声明与引用
#!/usr/bin/env python 会查找python的位置 name='buer' #变量的声明 name #通过变量名,引用变量的值 print(name) #引用并且打印变量的名name对应的值,即'buer'
1 #所有脚本第一句话都要写解释以下脚本是用什么解释器 2 #!/usr/bin/python python 3 #语言设置为:简体中文 4 #_*_coding:utf-8_*_ 5 6 7 #变量定义的规则: 8 9 #变量名只能是 字母、数字或下划线的任意组合 10 #变量名的第一个字符不能是数字 11 #以下 关键字 不能声明为变量名 12 ['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 13 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 14 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 15 'return', 'try', 'while', 'with', 'yield']
16 #变量要有意义
17 #变量不能太长
18 #不要用中文
19 #推荐使用驼峰或者下划线命名
20 #区分大小写
5.简单的账号密码
1 #input <输入> 2 #print<打印> 3 username = input('用户名') 4 password = input('密码') 5 print(username,password) 6 ######################################>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 7 #输入密码时,如果想要不可见,需要利用getpass 模块中的 getpass方法,即: 8 9 10 import getpass 11 12 username = input('usernmae:') 13 password = getpass.getpass('password:') 14 15 print(username,password) 16 17 18 19 ######################################>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 20 21 # .format <格式> 22 # import <调用> getpass<py系统自带函数模块,密文输入> 23 # print <打印> 24 # if <条件成立执行> 25 # and <而且> 26 # else <if条件不成立时执行> 27 28 import getpass 29 30 name = 'alex' 31 word = 'as123' 32 33 username = input('名字:') 34 password = input('密码:') 35 36 if name == username and word == password: 37 print('欢迎 {N} 登录'.format(N=name)) 38 else: 39 print('账号或者密码错误')
6.for循环
1 # i <变量名> 2 # range(10) <范围> (0,1,2,3,4,5,6,7,8,9)<0-9十个数> 3 4 for i in range(10): 5 print('loop',i) 6 7 8 # (0,10,3) <起始数,结束值,步长> <步长默认加1> 9 for i in range(0,10,3): 10 print('loop',i) 11 12 13 ######################################>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 14 15 # continue <跳出本次循环,重新循环> 16 17 for h in range(0,10): 18 if h <3: 19 print('loop',h) 20 else: 21 print('kkkkkk...') 22 continue 23 print('yyyyyy...') 24 print('呵呵呵...') 25 26 ######################################>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 27 28 # for t in range(9) <条件循环> <变量名> <在> <范围(参数)> 29 # print <打印> 30 # if <条件判断> 31 # break <中止程序> 32 33 for t in range(9): 34 print('______',t) 35 for j in range(11,50): 36 print(j) 37 if j >= 22: 38 break
7.python的数据类型
1 1、数字 2 int(整型) 3 -9223372036854775808~9223372036854775807 4 5 float(浮点型) 6 3.23和52.3E-4是浮点数的例子。E标记表示10的幂。在这里,52.3E-4表示52.3 * 10-4 7 complex(复数) 8 (-5+4j)和(2.3-4.6j)是复数的例子,其中-5,4为实数,j为虚数 9 10 2、布尔值 11 真或假 12 1 或 0 13 14 3、字符串 15 "hello world"
8.显示数据类型
9.数据运算
10. 简单的几个习题
10.1 使用while循环输入 1 2 3 4 5 6 8 9 10
#coding=utf-8 count = 1 while count < 11: if count == 7: pass else: print (count) count = count+1 print ('--end--')
10.2 求1-100的所有数的和
#coding=utf-8 a = 1 b = 0 while a < 101: b = b + a a = a+1 print (b)
10.3求1-100的所有偶数
#coding=utf-8 a = 1 while a < 101: temp = a %2 if temp ==0: pass print (a) else: pass a = a+1
10.4求1-2+3-4+5..99的所有和
#coding=utf-8 a = 1 b = 0 while a < 101: temp = a % 2 if temp == 0: b = b - a else: b = b + a a = a+1 print(b)
10.5 用户登录(3次重试机会)
import getpass s_name = "zhao" s_pass = "123456" count = 0 while count < 3: tar_name = input("输入你的账户") password = input("输入你的密码") if tar_name == s_name and password == s_pass: print "欢迎进入" break elif not tar_name and not password: print "账户名不能为空" count +=1 else: print "账户密码错误" count +=1
一、流程控制
1.条件语句
条件判断
计算机之所以能做很多自动化的任务,因为它可以自己做条件判断
1
2
3
|
a = 5 if a > 2 : print ( 'yes' ) |
根据Python的缩进规则,如果if
语句判断是True
,就把缩进的两行print语句执行了,否则,什么也不做。
也可以给if
添加一个else
语句,意思是,如果if
判断是False
,不要执行if
的内容,去把else
执行了:
a = 5
if a > 8:
print('yes')
else:
print('no')
a = 5
if a > 8:
print('yes')
elif a > 3:
print('no')
else:
print('bey')
elif
是else if
的缩写,完全可以有多个elif
,所以if
语句的完整形式就是:
if <条件判断1>: <执行1> elif <条件判断2>: <执行2> elif <条件判断3>: <执行3> else: <执行4>
if
语句执行有个特点,它是从上往下判断,如果在某个判断上是True
,把该判断对应的语句执行后,就忽略掉剩下的elif
和else
if
判断条件还可以简写,比如写:
1
2
|
if x: print ( 'True' ) |
只要x
是非零数值、非空字符串、非空list等,就判断为True
,否则为False
。
2.循环
Python的循环有两种,一种是for...in循环,依次把list或tuple中的每个元素迭代出来,看例子:
for i in range(0,5):
print(i)
else:
print('The for loop is over')
names = ['Michael', 'Bob', 'Tracy']
for name in names:
print(name)
所以for x in ...
循环就是把每个元素代入变量x
,然后执行缩进块的语句。
再比如我们想计算1-100的整数之和,可以用一个sum
变量做累加:
sum = 0
for x in range(101):
sum+=x
print(sum)
习题:公鸡5文钱一只,母鸡3文钱一只,小鸡3只一文钱,用100文钱买一百只鸡,其中公鸡,母鸡,小鸡都必须要有,问公鸡,母鸡,小鸡要买多少只刚好凑足100文钱。
for x in range(1,20):
for y in range(1,33):
z = 100-x-y
if (z % 3 == 0) and (x * 5 + y * 3 + z / 3 == 100):
s = "公鸡:%d;母鸡:%d;小鸡:%d;" %(x,y,z)
print(s)
第二种循环是while循环,只要条件满足,就不断循环,条件不满足时退出循环。比如我们要计算100以内所有奇数之和,可以用while循环实现:
sum = 0
n = 99
while n > 0:
sum += n
n = n - 2
print(sum)
break
在循环中,break
语句可以提前退出循环。例如,本来要循环打印1~100的数字:
n = 1
while n <= 100:
if n > 10: # 当n = 11时,条件满足,执行break语句
break # break语句会结束当前循环
print(n)
n += 1
print('END')
执行上面的代码可以看到,打印出1~10后,紧接着打印END
,程序结束。
可见break
的作用是提前结束循环。
continue
在循环过程中,也可以通过continue
语句,跳过当前的这次循环,直接开始下一次循环。
n = 0
while n < 10:
n += 1
if n % 2 == 0: # 如果n是偶数,执行continue语句
continue # continue语句会直接继续下一轮循环,后续的print()语句不会执行
print(n)
执行上面的代码可以看到,打印的不再是1~10,而是1,3,5,7,9。
可见continue
的作用是提前结束本轮循环,并直接开始下一轮循环。
小结:break用于退出本层循环;continue用于退出本次循环,继续下一次循环