python入门1-环境准备
python入门2-变量、语句、运算符、列表、元组、字典
python入门3-函数
python入门4-面向对象
python入门5-numpy
python入门6-pandas
七、函数
函数格式:
def sub(x,y):
return x-y
print sub(3,2) 控制台输出1
关键字参数,位置参数:
def test(x , y , z=10):
print x, y ,z
test(1,2,3) 控制台输出1,2,3
test(1,2) 控制台输出1,2,10
test(x=1,z=3,y=2) 控制台输出1,2,3
定义的时候,* 参数,将位置实参,装配成元组
def test(x, y, z, *args):
print x, y, z, args
print test(1,2,3,4,5) 控制台输出1 2 3 (4, 5)
定义的时候, ** 参数,将关键字实参,装配成字典
def test(x, y, z, **keys):
print x, y, z, keys
print test(1, 2, 3, a=4, b=5) 控制台输出1 2 3 {'a': 4, 'b': 5}
调用的时候,*可以将元组或列表,打散成位置参数
调用的时候,**可以将字典,打散成关键字参数
def test(x, y, z):
print x, y, z
x = [1, 2, 3]
test(*x) 控制台输出1 2 3
y = {"x":"1","y":"2","z":"3"}
test(**y) 控制台输出1 2 3
i = [0 , 1 , 2]
强引用 test( i ) 正常传参, 里面可以修改i
弱引用 test( list(i) ) 里面修改不了i
# 可变对象(list dict)
number = [1,2,3]
def getNum(number):
number.append(4)
print(number) # [1, 2, 3, 4]
getNum(number)
print(number) # [1, 2, 3, 4]
# 不可变对象(string tuple int float)
def PName(str):
str+="aaa"
str = 'zhangsan'
PName(str)
print(str)
# zhangsan
变量作用域
i = 10 #全局变量 def visit_i(): print i #控制台输出10 def change_i(): global i #默认不许修改全局变量,除非如此声明 i += 1 print i #控制台输出11
函数不支持重载,同名方法会覆盖前面定义的方法
函数的嵌套
def test():
def test1():
print "hello"
return test1
a = test()
a() # 相当于调用了test1()
函数的闭包(内层函数可以获得父层函数的参数)
def test0(x):
def test1(y):
print x + y
return test1
c = 10
obj = test0(c)
c = 100
obj(20) #控制台输出30
装饰器(相当于拦截器,常用于添加日志、权限判断)
无参数(是否需要写return res 取决于delete 是否return )
def log(myfunction):
def wrap(*args,**kwargs):
print "添加日志开始1"
res = myfunction(*args,**kwargs)
print "添加日志结束2"
return res
return wrap
@log
def delete():
print "删除操作"
delete()
# 添加日志开始1
# 删除操作
# 添加日志结束2
有参数
def log(i):
def wrap1(func):
def wrap2(*args,**kwargs):
print "日志开始"
if i>0:
print "拥有权限"
func(*args, **kwargs)
else:
print "权限不够"
print "日志结束"
return wrap2
return wrap1
@log(1)
def delete():
print "删除操作"
delete()
# 日志开始
# 拥有权限
# 删除操作
# 日志结束
迭代器
import itertools
x = range(1,10)
com1 = itertools.combinations(x , 3) #排列
for i in com1:
print i
# (1, 2, 3)
# (1, 2, 4)
# (1, 2, 5)
# (1, 2, 6)
# (1, 2, 7)
# (1, 2, 8)
# (1, 2, 9)
# (1, 3, 4)
# (1, 3, 5)
# ......
# (6, 7, 8)
# (6, 7, 9)
# (6, 8, 9)
# (7, 8, 9)
com2 = itertools.permutations(x , 3) #组合
for i in com2:
print i
y = ['a','b','c']
com3 = itertools.product(x , y) #笛卡尔积
for i in com3:
print i