Python基础篇【第六篇】:函数补充
三元运算
三元运算(三目运算),是简单的条件的语句缩写。
Python没有三目运算符但是可以用if else语句实现相同的功能:
#!/usr/bin/env python3 #三元运算格式 #result = 值1 if 条件 else 值2 #如果条件成立,那么值1赋值给变量result,否则将值2赋给result变量 #实例: result = True if 1 > 0 else False print(result) #运行结果 True
lambda表达式
通过三元运算可以很快完成简单的if else 语句:
#普通if else语句 if 1 == 1: name = 'wuSri_神人' else: name = 'alex_逗逼' print(name) #三元运算: name = 'wuSri_神人' if 1 == 1 else 'alex_逗逼' print(name)
执行结果:
/Library/Frameworks/Python.framework/Versions/3.5/bin/python3.5 /Users/zk/PycharmProjects/old_boy/day05/boke.py
wuSri_神人
wuSri_神人
Process finished with exit code 0
简单的函数也可以用简单的表达式(lambda表达式):
1 #普通函数 2 def func(arg): 3 return arg + 1 4 5 result = func(123) 6 print(result) 7 8 #用lambda表达式 9 sum_lambda = lambda arg : arg + 1 10 11 result = sum_lambda(123) 12 print(result) 13 执行结果: 14 /Library/Frameworks/Python.framework/Versions/3.5/bin/python3.5 /Users/zk/PycharmProjects/old_boy/day05/boke.py 15 124 16 124 17 18 Process finished with exit code 0
函数的参数
函数有三种不同的参数:普通参数、默认参数、动态参数。
三种参数实例介绍与使用:
1 #定义函数 2 3 #普通参数,数量一一对应 4 def func1(name): #name叫做函数func的形式参数,简称形参 5 print("func1",name) 6 7 func1('wuSir') #执行函数,'wuSir叫函数func的实际参数,简称实参 8 9 10 #默认参数,一定要把参数放到尾部 11 def func2(name,age = 88): #默认函数age = 88 12 print("func2 " "%s:%s" %(name,age)) 13 14 func2('wuSir',98) #执行函数,指定函数让age = 98 15 func2('alex') #执行函数,使用默认参数 16 17 #动态参数,*args有多少参数接受多少参数,用tuple表示 18 def func3(*args): 19 print("func3",args) 20 21 func3(11,22,33,44,55) #执行函数,传入实参 22 li = [1,2,3,4,5] #定义一个列表 23 func3(*li) #把列表传入到函数并执行 24 25 #动态参数,**kwargs有多少参数接收多少参数,用字典表示 26 def func4(**kwargs): 27 print("func4",kwargs) 28 29 30 func4(name = 'wuSir',age = 18) #执行函数,传入实参 31 li = {'name':'wuSir','age':18,'gender':'male'} #定义一个字典 32 func4(**li) #把字典传入到函数并执行 33 34 #动态参数,**args/**kwargs表示即接收元组的形式又接收字典的方式,全能的~ 35 def func5(*args,**kwargs): 36 print("func5_args",args) 37 print("func5_kwargs",kwargs) 38 39 func5(1,2,3,4,5,name = "wuSir",age = 18,gender = 'male')
以上代码执行结果:
1 /Library/Frameworks/Python.framework/Versions/3.5/bin/python3.5 /Users/zk/PycharmProjects/old_boy/day05/boke.py 2 func1 wuSir 3 func2 wuSir:98 4 func2 alex:88 5 func3 (11, 22, 33, 44, 55) 6 func3 (1, 2, 3, 4, 5) 7 func4 {'name': 'wuSir', 'age': 18} 8 func4 {'age': 18, 'name': 'wuSir', 'gender': 'male'} 9 func5_args (1, 2, 3, 4, 5) 10 func5_kwargs {'gender': 'male', 'name': 'wuSir', 'age': 18} 11 12 Process finished with exit code 0
内置函数
1、求绝对值:abs()
1 #绝对值 2 i = abs(-123) 3 print(i) 4 #运行结果 5 123
2、all,循环参数,如果每个元素都为真,那么all的返回值就为真
1 r = all([True,True,False]) 2 print(r) 3 #执行结果 4 False 5 r = all([True,True,True]) 6 print(r) 7 #执行结果 8 True
#假,0,None,'',[],(),{}, =====> 0,None,空值
3、any只要有一个为真就为真。
1 i = any([None,'',[],{},(),1]) 2 print(i) 3 #执行结果 4 True
4、ascii,在对象的类中找__repr__方法,获取它的返回值。
1 class Foo: 2 def __repr__(self): 3 return "hello" 4 obj = Foo() 5 r = ascii(obj) 6 print(r) 7 #执行结果 8 hello
5、bin(),二进制
1 r = bin(11) 2 print(r) 3 #执行结果 4 0b1011
6、oct(),八进制
1 r = oct(8) 2 print(r) 3 #执行结果 4 0o10
7、int(),十进制
1 i = int(10) 2 print(i) 3 #执行结果 4 10
8、hex(),十六进制
1 r = hex(14) 2 print(r) 3 #执行结果 4 0xe
9、进制之间转换
1 int(10) 2 i = int('0b11',base=2) #二进制转换十进制 3 print("2转10",i) 4 5 i = int('11',base=8) #八进制转换十进制 6 print("8转10",i) 7 8 i = int('0xe',base=16) #十六进制转换十进制 9 print("16转10",i) 10 11 #执行结果 12 13 2转10 3 14 8转10 9 15 16转10 14
10、bytes 字节
1 #bytes('xxxx',encoding='utf-8') 2 byt = bytes('hello',encoding='utf-8') 3 4 #运行结果 5 6 <class 'bytes'> b'hello'
11、chr()数字转换成字符串
1 #只适用于ascill码 2 c = chr(66) 3 print(c) 4 5 #执行结果 6 7 B
12、ord()字符串转换成数字
1 #只适用于ascill码 2 i = ord('i') 3 print(i) 4 5 #执行结果 6 7 105
13、根据chr(),ord()内置函数写一个验证码的实例:
1 #----------验证码------------ 2 #生成一个随机数 3 #数字转换成字母:chr() 4 import random 5 6 temp = "" #定义一个空的字符串等待结果传入 7 8 for i in range(6): 9 num = random.randrange(0,4) #生成0-4的随机数 10 if num == 3 or num == 1: 11 rad2 = random.randrange(0,10) #如果随机数是1或3,那么就在验证码中生成一个0-9的随机数 12 temp = temp + str(rad2) 13 else: 14 rad1 = random.randrange(65,91) #否则,验证码中生成了一个随机数 15 c1 = chr(rad1) 16 temp = temp +c1 17 print(temp) 18 19 #执行结果 20 21 BR677D #结果是随机的
14、callable判断是不是可以执行可执行返回结果为True,否则Flase
1 def f1(): 2 return 123 3 4 f1() 5 r = callable(f1) 6 print(r) 7 8 #执行结果 9 10 True
15、divmod(a,b)方法返回的是a//b(除法取整)以及a对b的余数,返回结果类型为tuple
1 a = 10/3 2 print("一般",a) 3 r = divmod(10,3) 4 print("divmod",r) 5 6 #执行结果 7 8 一般 3.3333333333333335 9 divmod (3, 1)
16、eval可以执行以字符串形式的表达式
1 #一般表达形式 2 a = 1 + 3 3 print(a) 4 5 a = "1 + 3" 6 print(a) 7 8 #eval 9 a = eval("1 + 3") 10 print(a) 11 12 #执行结果 13 14 4 15 1 + 3 16 4
17、exec语句用来执行储存在字符串或者文件中的python语句。可以生成一个包含python代码的字符串,然后使用exec语句执行这些语句。
1 >>>exec 'print "hello word"' 2 hello world 3 4 exec("for i in range(10):print(i)") 5 6 #执行结果 7 8 hello word 9 10 0 11 1 12 2 13 3 14 4 15 5 16 6 17 7 18 8 19 9
18、filter()函数可以对序列做过滤处理,就是说可以使用一个自定的函数过滤一个序列,把序列的每一项传到自定义的过滤函数里处理,并返回结果做过滤。最终一次性返回过滤后的结果。
filter()函数的参数:
第一个,自定函数名,必须的
第二个,需要过滤的列,也是必须的
1 #一般函数表达形式 2 3 def f1(x): 4 if x > 22: 5 return True 6 else: 7 return False 8 return True 9 ret = filter(f1,[11,22,33,44]) 10 for i in ret: 11 print(i) 12 13 #执行结果 14 15 33 16 44 17 18 #lambda表达式 19 # ret = filter(lambda x : x > 22,[11,22,33,44]) 20 for i in ret: 21 print(i) 22 23 #执行结果 24 25 33 26 44
19、map(函数,可迭代的对象),map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回。
1 #一般表达形式 2 def f1(x): 3 return x + 100 4 5 ret = map(f1, [1,2,3,4,5,]) 6 print(ret) 7 for i in ret: 8 print(i) 9 10 #执行结果 11 12 <map object at 0x101376780> 13 101 14 102 15 103 16 104 17 105 18 19 #lambda表达形式 20 ret = map(lambda x:x + 100,[1,2,3,4,5]) 21 print(ret) 22 for i in ret: 23 print(i) 24 25 #执行结果 26 27 <map object at 0x101376780> 28 101 29 102 30 103 31 104 32 105
20、获取当前代码里的所有全局变量globals
1 a = 1 2 b = 2 3 4 #运行结果 5 /Library/Frameworks/Python.framework/Versions/3.5/bin/python3.5 /Users/zk/PycharmProjects/old_boy/day05/s1.py 6 {'__doc__': None, '__spec__': None, '__file__': '/Users/zk/PycharmProjects/old_boy/day05/s1.py', '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x1007a5cf8>, '__builtins__': <module 'builtins' (built-in)>, '__name__': '__main__', 'b': 2, 'a': 1, '__cached__': None, '__package__': None} 7 8 Process finished with exit code 0
*globals 返回实际的全局名字空间,而不是一个拷贝(麻蛋有待了解)
21、获取当前代码里的所有局部变量locals
1 def foo(arg,a): 2 x = 1 3 y = "xxxxxxx" 4 for i in range(10): 5 j = 1 6 k = i 7 print(locals()) 8 foo(1,2) 9 10 #执行结果 11 12 {'j': 1, 'x': 1, 'k': 9, 'arg': 1, 'a': 2, 'i': 9, 'y': 'xxxxxxx'} 13 14 #locals 是一个返回 dictionary 的函数, 并且在 dictionary 中设置一个值。
22、hash
#hash值 dic = {"sadfasdfasdfasdfasdfasdf":1} i = hash("sadfasdfasdfasdfasdfasdf") #把一般字符串转成hash值 print(i)
23、isinstance()判断某个对象是否是某一个类创建的,如果是返回True,否则False
1 li = [11,22] 2 r = isinstance(li,int) 3 print(r) 4 5 #执行结果 6 7 False 8 9 r = isinstance(li,list) 10 print(r) 11 12 #执行结果 13 14 True
24、issubclass(),本函数用来判断类参数class是否是类型参数classinfo的子类
1 class Line: 2 pass 3 4 class RedLine(Line): 5 pass 6 7 class Rect: 8 pass 9 10 print(issubclass(RedLine,Line)) 11 print(issubclass(Rect,Line)) 12 13 #执行结果 14 15 True 16 False
25、iter迭代器,创建一个可以被迭代的东西
1 obj = iter([11,22,33,44]) 2 3 r1 = next(obj) 4 print(r1) 5 6 #执行结果 7 8 11
26、max()取最大值
1 li = [11,22,33,44] 2 r = max(li) 3 print(r) 4 5 #执行结果 6 7 44
27、main()取最小值
1 li = [11,22,33,44] 2 r2 = min(li) 3 print(r2) 4 5 #执行结果 6 7 11
28、pow()指数
1 i = pow(2,100) 2 print(i) 3 4 #执行结果 5 6 1267650600228229401496703205376
29、round四舍五入
1 r = round(3.6) 2 print(r) 3 4 #执行结果 5 6 4
30、sum求和
1 r = sum([1,2,3,4,5]) 2 print(r) 3 4 #执行结果 5 6 15
31、zip函数接受任意多个(包括0个和1个)序列作为参数,返回一个tuple列表。
1 li1 = [11,22,33,44] 2 li2 = ["a","B"] 3 r = zip(li1,li2) 4 for i in r: 5 print(i) 6 7 #执行结果 8 9 (11, 'a') 10 (22, 'B')
32、sorted 函数是内建函数,他接受一个序列,返回有序的副本
1 #------------------*排序*---------------# 2 li = [1,34,41,23,23,1234] 3 print(li) 4 li.sort() 5 print(li) 6 7 a = sorted(li) 8 print(a) 9 10 char=['赵',"123", "1", "25", "65","679999999999", "a","B","alex","c" ,"A", "_", "ᒲ",'a钱','孙','李',"余", '佘',"佗", "㽙", "铱", "钲钲㽙㽙㽙"] 11 12 new_chat = sorted(char) 13 print(new_chat) 14 for i in new_chat: 15 print(bytes(i, encoding='utf-8')) 16 17 #执行结果 18 19 /Library/Frameworks/Python.framework/Versions/3.5/bin/python3.5 /Users/zk/PycharmProjects/old_boy/day05/s1.py 20 [1, 34, 41, 23, 23, 1234] 21 [1, 23, 23, 34, 41, 1234] 22 [1, 23, 23, 34, 41, 1234] 23 ['1', '123', '25', '65', '679999999999', 'A', 'B', '_', 'a', 'alex', 'a钱', 'c', 'ᒲ', '㽙', '佗', '佘', '余', '孙', '李', '赵', '钲钲㽙㽙㽙', '铱'] 24 b'1' 25 b'123' 26 b'25' 27 b'65' 28 b'679999999999' 29 b'A' 30 b'B' 31 b'_' 32 b'a' 33 b'alex' 34 b'a\xe9\x92\xb1' 35 b'c' 36 b'\xe1\x92\xb2' 37 b'\xe3\xbd\x99' 38 b'\xe4\xbd\x97' 39 b'\xe4\xbd\x98' 40 b'\xe4\xbd\x99' 41 b'\xe5\xad\x99' 42 b'\xe6\x9d\x8e' 43 b'\xe8\xb5\xb5' 44 b'\xe9\x92\xb2\xe9\x92\xb2\xe3\xbd\x99\xe3\xbd\x99\xe3\xbd\x99' 45 b'\xe9\x93\xb1' 46 47 Process finished with exit code 0 48 49 #结果都是通过二级制表示大小进行重新排序的!