python成长之路8——函数

一. 什么是函数

函数是用来封装一个功能的代码集合,我们可以调用这个函数来实现它所具备的功能。这样就可以实现代码的重复利用。

def 函数名(参数):
    函数体
    return 返回值  #函数是有默认的返回值的(None)

二. 参数

参数分为:普通参数,指定参数,默认参数,动态参数,万能参数

普通参数:

1 def f1(a):
2     print(a)
3 f1(123)
普通参数

指定参数:

1 def f1(a,b):
2     print(a,b)
3 f1(a=123,b=456)
指定参数

默认参数:

1 def f1(a,b=456):
2     #默认参数必须放在参数列表的后面
3     print(a,b)
4 f1(a=123)
默认参数

动态参数:

#动态参数分两种:
#第一种
def f1(*args):
    #默认传入的参数全部放在元祖中,按顺序传参时用
    print(args)
#调用函数时有两种方式:
#方式一
f1(1,2,3,4)
#方式二
li=["a","b","c","d"]
f1(*li)

执行结果:
(1, 2, 3, 4)
('a', 'b', 'c', 'd')

#第二种
def f2(**kwargs):
    # 默认传入的参数全部放在字典中,按顺序传参时用
    print(kwargs)
#调用函数时也有两种方式:
#方式一
f2(k1=1,k2=2,k3=3)
#方式二
dic={"k1":"v1","k2":"v2","k3":"v3"}
f2(**dic)

执行结果:
{'k1': 1, 'k3': 3, 'k2': 2}
{'k1': 'v1', 'k3': 'v3', 'k2': 'v2'}
动态参数

万能参数:

def f1(*args,**kwargs):
    #将两种动态参数放在一起,就是万能参数
    print(args)
    print(kwargs)
#调用方式有两种:
#方式一:
f1(1,2,k1="v1",k2="v2")
#方式二:
li=["a","b"]
dic={"k1":1,"k2":2}
f1(*li,**dic)

执行结果:
(1, 2)
{'k2': 'v2', 'k1': 'v1'}
('a', 'b')
{'k2': 2, 'k1': 1}
万能参数

万能参数小例子:

s1="I am {0},age is {1}".format("zy","26")
print(s1)
print("-"*20)
s2="I am {0},age is {1}".format(*["zy","26"])
print(s2)
print("-"*20)
k1="I am {name},age is {age}".format(age=26,name="zy")
print(k1)
print("-"*20)
k1="I am {name},age is {age}".format(**{"age":26,"name":"zy"})
print(k1)

执行结果:
I am zy,age is 26
--------------------
I am zy,age is 26
--------------------
I am zy,age is 26
--------------------
I am zy,age is 26
str.format(*args,**kwargs)

三. 函数注意事项

  1. 不管是函数还是类,有重名的时候,最后一个生效,上面的就都会被python回收
  2. 函数的参数进行传递的时候传的是引用还是值(copy)呢?传的是引用

四. 全局变量

  1. 全局变量要全部大写
  2. 全局变量在所有作用域都可读
  3. 全局变量要“重新赋值”必须加“global”
 1 #全局变量在全部作用域可读
 2 NAME="alex"
 3 def f1():
 4     print(NAME)
 5 f1()
 6 print(NAME)
 7 
 8 执行结果:
 9 alex
10 alex
11 
12 #全局变量重新赋值要global
13 AGE=18
14 def f2():
15     AGE=999  #定义了一个局部变量,局部变量优先级高于全局变量
16     print(AGE)
17 f2()
18 print(AGE)  #函数中的修改未影响全局变量
19 def f3():
20     global AGE
21     AGE=999   #修改全局变量
22     print(AGE)
23 f3()
24 print(AGE)
25 
26 执行结果:
27 999
28 18
29 999
30 999
全局变量

五. 内置函数

 1 #abs()
 2 print(abs(-10))
 3 
 4 执行结果:
 5 10
 6 
 7 #abs()
 8 print(abs(-10))
 9 #all() 全部为真才为真
10 #any() 有一个为真即为真
11 #all和any需要一个可迭代的参数,例如list等
12 #False:0,None,"",[],{},()
13 m=[1,2,3]
14 n=[1,2,0]
15 print(m,":",all(m))
16 print(n,":",all(n))
17 p=[0,None,[],{}]
18 q=[1,0,[],{}]
19 print(p,":",any(p))
20 print(q,":",any(q))
21 
22 执行结果:
23 [1, 2, 3] : True
24 [1, 2, 0] : False
25 [0, None, [], {}] : False
26 [1, 0, [], {}] : True
27 
28 #ascii(),参数是对象,自动执行对象的__repr__方法
29 class Foo:
30     def __repr__(self):
31         return "111"
32 f=Foo()
33 n=ascii(f)
34 print(n)
35 
36 执行结果:
37 111
38 
39 #bin()  10转2
40 #oct()  10转8
41 #hex()  10转16
42 #参数都是10进制数
43 print(bin(5))
44 print(oct(9))
45 print(hex(17))
46 
47 执行结果:
48 0b101
49 0o11
50 0x11
51 
52 #bytes(要转换的字符串,编码),将字符串转换成字节码
53 # GBK:一个汉字是2个字节,UTF8:一个汉字是3个字节(每个字节8位,是用16进制表示的)
54 b=bytes("abcd",encoding="utf-8")
55 print(b)
56 c=str(b,encoding="utf-8”)  #将字节码转换成字符串
57 print(c)
58 d=bytes("张燕",encoding="utf8")
59 print(d)
60 e=str(d,encoding="utf8")
61 print(e)
62 
63 执行结果:
64 b'abcd'
65 abcd
66 b'\xe5\xbc\xa0\xe7\x87\x95'
67 张燕
68 
69 print(bytes("张燕",encoding="GBK"))
70 
71 执行结果:
72 b'\xd5\xc5\xd1\xe0’
一些内置函数

三目运算:

 1 #三目运算
 2 a="1+1=2" if 1 + 1 == 2 else "1+1!=2"
 3 print(a)
 4 
 5 执行结果:
 6 1+1=2
 7 
 8 #lambda函数
 9 #函数名=lambda 参数: 函数体
10 #默认有返回值
11 f1=lambda a,b: a+b
12 c=f1(2,5)
13 print(c)
14 
15 执行结果:
16 7
三目运算和lambda函数

 

posted @ 2017-02-17 14:51  meitangyanyan  阅读(153)  评论(0编辑  收藏  举报