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 #结果都是通过二级制表示大小进行重新排序的!

 

posted @ 2016-05-10 16:21  汪汪小喵咪  阅读(261)  评论(0编辑  收藏  举报