1. Python中简单内置函数
1.1 内置对象查看
#dir(__builtin__)
In [2]: print(dir(__builtin__))
['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException', 'BlockingIOError', 'BrokenPipeError', 'BufferError', 'BytesWarning', 'ChildProcessError', 'ConnectionAbortedError', 'ConnectionError', 'ConnectionRefusedError', 'ConnectionResetError', 'DeprecationWarning', 'EOFError', 'Ellipsis', 'EnvironmentError', 'Exception', 'False', 'FileExistsError', 'FileNotFoundError', 'FloatingPointError', 'FutureWarning', 'GeneratorExit', 'IOError', 'ImportError', 'ImportWarning', 'IndentationError', 'IndexError', 'InterruptedError', 'IsADirectoryError', 'KeyError', 'KeyboardInterrupt', 'LookupError', 'MemoryError', 'ModuleNotFoundError', 'NameError', 'None', 'NotADirectoryError', 'NotImplemented', 'NotImplementedError', 'OSError', 'OverflowError', 'PendingDeprecationWarning', 'PermissionError', 'ProcessLookupError', 'RecursionError', 'ReferenceError', 'ResourceWarning', 'RuntimeError', 'RuntimeWarning', 'StopAsyncIteration', 'StopIteration', 'SyntaxError', 'SyntaxWarning', 'SystemError', 'SystemExit', 'TabError', 'TimeoutError', 'True', 'TypeError', 'UnboundLocalError', 'UnicodeDecodeError', 'UnicodeEncodeError', 'UnicodeError', 'UnicodeTranslateError', 'UnicodeWarning', 'UserWarning', 'ValueError', 'Warning', 'ZeroDivisionError', '__IPYTHON__', '__build_class__', '__debug__', '__doc__', '__import__', '__loader__', '__name__', '__package__', '__spec__', 'abs', 'all', 'any', 'ascii', 'bin', 'bool', 'bytearray', 'bytes', 'callable', 'chr', 'classmethod', 'compile', 'complex', 'copyright', 'credits', 'delattr', 'dict', 'dir', 'display', 'divmod', 'enumerate', 'eval', 'exec', 'filter', 'float', 'format', 'frozenset', 'get_ipython', 'getattr', 'globals', 'hasattr', 'hash', 'help', 'hex', 'id', 'input', 'int', 'isinstance', 'issubclass', 'iter', 'len', 'license', 'list', 'locals', 'map', 'max', 'memoryview', 'min', 'next', 'object', 'oct', 'open', 'ord', 'pow', 'print', 'property', 'range', 'repr', 'reversed', 'round', 'set', 'setattr', 'slice', 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', 'type', 'vars', 'zip']
1.2 常见函数
len 求长度
min 求最小值
max 求最大值
sorted 排序
reversed 倒序
sum 求和
In [4]: a = [2,8,5]
In [5]: len(a) #求长度
Out[5]: 3
In [6]: min(a) #求最小值
Out[6]: 2
In [7]: max(a) #求最大值
Out[7]: 8
In [8]: sorted(a) #排序
Out[8]: [2, 5, 8]
In [9]: reversed(a) #倒序,返回的是内存地址
Out[9]: <list_reverseiterator at 0x7f33e2d779e8>
In [10]: a
Out[10]: [2, 8, 5]
In [11]: list(reversed(a)) #把返回的倒序的内存地址直接转换为列表
Out[11]: [5, 8, 2]
In [12]: sum(a) #求和
Out[12]: 15
1.3 进制转换函数
bin 转换为二进制
oct 转换为八进制
hex 转换为十六进制
ord 字符转ASCII码
chr ASCII码转字符
In [14]: bin(12) #把10进制的12转换为二进制
Out[14]: '0b1100'
In [15]: oct(9) #把十进制的9转换为8进制
Out[15]: '0o11'
In [16]: hex(12) #把十进制的12转换为十六进制
Out[16]: '0xc'
In [17]: ord('A') #把A转换为ASCII码
Out[17]: 65
In [18]: ord('a') #把a转换为ASCII码
Out[18]: 97
In [19]: chr(97) #把97的ASCII码转为字符
Out[19]: 'a'
In [21]: chr(65) #把65的ASCII码转为字符
Out[21]: 'A'
2. Python中高级内置函数
1. enumerate
enumerate,返回一个可以枚举的对象,如列表,字典,元组
In [22]: a = ['a','b','c','d']
In [23]: enumerate(a)
Out[23]: <enumerate at 0x7f33e6571318>
In [24]: list(enumerate(a)) #转换为列表
Out[24]: [(0, 'a'), (1, 'b'), (2, 'c'), (3, 'd')]
In [25]: tuple(enumerate(a)) #转换为元组
Out[25]: ((0, 'a'), (1, 'b'), (2, 'c'), (3, 'd'))
In [26]: dict(enumerate(a)) #转换为字典
Out[26]: {0: 'a', 1: 'b', 2: 'c', 3: 'd'}
In [28]: set(enumerate(a)) #转换为集合
Out[28]: {(0, 'a'), (1, 'b'), (2, 'c'), (3, 'd')}
2. eval
eval
(1)取出字符串中的内容
(2)将字符串str当成有效的表达式来求值并返回计算结果
In [29]: a = '1+2+3'
In [30]: a
Out[30]: '1+2+3'
In [31]: eval(a)
Out[31]: 6
3. exec
exec,执行字符串或complie方法编译过的字符串;不常用
In [35]: exec('b = 4')
In [36]: b
Out[36]: 4
4. filter 过滤器
In [37]: def func(x):
...: return x > 5
...:
...:
In [38]: a = [1,3,6,7,8]
In [39]: filter(func,a)
Out[39]: <filter at 0x7f33e2d6a3c8>
In [40]: list(filter(func,a))
Out[40]: [6, 7, 8]
5. map
map,对于参数iterable中的每个元素都应用function函数,并将结果作为列表返回
In [41]: def func(num):
...: return num + 2
...:
...:
In [42]: a = [1,3,5,7]
In [43]: map(func,a)
Out[43]: <map at 0x7f33e2503cf8>
In [47]: list(map(func,a)) #把列表对应函数转换
Out[47]: [3, 5, 7, 9]
In [48]: list(map(str,a)) #把列表转换为字符串
Out[48]: ['1', '3', '5', '7']
6. zip
zip,将对象逐一配对
In [52]: a = [1,2,3]
In [53]: b = ('a','b',1)
In [58]: c = ['a','b','c','d','e']
In [54]: list(zip(a,b)) #把对象a和对象b配对
Out[54]: [(1, 'a'), (2, 'b'), (3, 1)]
In [59]: list(zip(a,c)) #只配对有共同的有的元素的个数
Out[59]: [(1, 'a'), (2, 'b'), (3, 'c')]
In [55]: tuple(zip(a,b))
Out[55]: ((1, 'a'), (2, 'b'), (3, 1))
In [56]: dict(zip(a,b))
Out[56]: {1: 'a', 2: 'b', 3: 1}
In [57]: set(zip(a,b))
Out[57]: {(1, 'a'), (2, 'b'), (3, 1)}
7. 作业
定义一个函数,可以对输入的数据进行排序,通过参数来决定是正向还是反向排序
def func(*args,reverse): #*args是可以传输多个对象的;如果只用参数a,就只能用一个
if reverse == 1:
b = sorted(args)
print(b)
elif reverse == 2:
c = sorted(args,reverse=True)
print(c)
else:
print('您的输入有误,请重新输入:')
func(*[12,3,94,0,5,2,2],reverse=1) #如果去掉*,就不能排序了,因为一个列表不能有多个参数
8. 匿名函数
lambda表达式,可以传递参数
def test(a,b,func):
c = func(a,b)
return c
num = test(2,3,lambda x,y:x*y)
print(num)
8.1 函数的作用域
lambda 表达式传参,可以传递函数
def test(a,b,func):
c = func(a,b)
return c
num = test(2,3,lambda x,y:x*y)
print(num)
6
函数的作用域,函数先执行局部变量,再执行全局变量
a = 100 #全局变量
def func():
#修改全局变量
global a #声明全局变量,但是我要修改你了,你做好准备了吗?
a = 200
a += 1
print(a)
func()
print(a)
201
201
nonlocal 用于函数的嵌套
def func():
a = 200
def func_2():
nonlocal a # 函数嵌套,想要改变这个局部变量
a += 1
return a
return func_2() #缩进最能体现函数的作用域
a = func()
print(a)
201
闭包:函数里面再定义一个函数,并且外层函数返回了内层函数的函数体 函数里面再定义一个函数,这个函数用到了外面这个函数变量
def test(num):
def test_in(num_in):
print(num_in)
return num + num_in
return test_in
a = test(100)
print(a(120))
120
220
递归,在python中使用得很少,递归太消耗效率了
def func(num):
if num > 1:
return num * func(num - 1)
else:
return num
# print(func(10000)) #超过了递归的深度
print(func(5))
120