调用函数和参数
1、定义函数
- def关键字开头
- 所有传入参数和自变量必须放入圆括号中,可以在括号内定义参数
- 第一行可以选择性使用文档字符串
- 函数内容以冒号开始,要缩进
- Return 表示结束函数,不带表达式的return相当于返回none
基础方法实例:
def test():
a=10
b=20
print(a)
print(b)
print(a+b)
test()
2、参数类型
(1)必须参数:必须以正确的顺序传入函数
def test(mm):
print('必须参数:',mm)
print('必须参数2:',mm)
test('hello,world')
>>>必须参数: hello,world
>>>必须参数2: hello,world
(2)关键字参数:函数调用时使用关键字参数传入值
def test(mm,nn):
print('姓名',mm)
print('年龄',nn)
return
test('小雪',20)
test(nn=21,mm='小红')
>>>姓名 小雪
>>>年龄 20
>>>姓名 小红
>>>年龄 21
(3)默认参数:调用函数时,没有传递参数,会使用默认参数
def test(name,age=21):
print('姓名:',name)
print('年龄:',age)
return
test('小萌')
>>>姓名: 小萌
>>>年龄: 21
#非默认参数要跟在默认参数之后
def enroll(name, gender, age=6, city='Beijing'):
print('name:', name)
print('gender:', gender)
print('age:', age)
print('city:', city)
enroll("kangkang",2)
>>>name: kangkang
>>>gender: 2
>>>age: 6
>>>city: Beijing
enroll("xiaoming",6,12,'重庆')
>>>name: xiaoming
>>>gender: 6
>>>age: 12
>>>city: 重庆
(4)可变参数:可变参数就是指传入的参数是可以改变的,可以是1个2个...,甚至不指定
def p(*a):
print('输出:',a)
return
p(1,2,(1,2))
>>>输出: (1, 2, (1, 2)
-------
test=('a','b','c','d') ** 输出字典
def mm(name,**kw):
print('姓名:',name,'其它:',kw)
mm('小雪',nn=test[0])
>>>姓名: 小雪 其它: {'nn': 'a'}
(5)组合参数
def test(p1,p2,p3=0,*vart,**kw):
print('p1=',p1,'p2=',p2,'p3=',p3,'vart=',vart,'kw=',kw)
test(1,2,3,'abc',x=3)
>>>p1= 1 p2= 2 p3= 3 vart= ('abc',) kw= {'x': 3}
变量作用域
1、局部变量
局部变量,变量只能在函数内部用;全局变量,函数可以在任意处使用
(1)def func(x):
print('局部变量x为',x)
(2)func(10) #局部变量x为 10
2、全局变量
(1) 例子1
num=100
print('函数外num的值为:',num)
def fun():
global num
num=200
print('函数内num的值为:',num)
fun()
print(num)
>>>>函数外num的值为: 100
>>>>函数内num的值为: 200
>>>>200
(2) global语句可以声明一个或多个变量为全局变量
def save_case_infos(case_urls):
global case_total_num # global声明
for case_url in case_urls:
case_total_num += 1
print("current count: " ,case_total_num)
case_total_num = 0
urls = [r'http://cynhard.com/live/001',r'http://cynhard.com/live/002',
r'http://cynhard.com/live/003']
save_case_infos(urls)
>>>current count: 1
>>>current count: 2
>>>current count: 3
返回函数
def sum_late(*args):
def test():
ax=0
for n in args:
ax=ax+n
return ax
return test
test=sum_late(1,2,3,4)
print(test())
>>>10
闭包:内部对外部函数变量进行引用,且不是全局作用域,内部函数称为闭包
闭包引用循环
def count():
def f(j):
def g():
return j*j
return g
fs=[]
for i in range(1,4):
fs.append(f(i))
return fs
f1,f2,f3=count()
print(f1()) 1
print(f2()) 4
print(f3()) 9
递归函数+匿名函数+偏函数
1、递归函数
def fact(n):
if n==1:
return 1
return n*fact(n-1)
print('函数归递结果:',fact(5))
>>>函数归递结果: 120 (5*4*3*2*1=120)
2、匿名函数: lambda函数也叫匿名函数,即不使用def这样的标准语句定义函数
def f(x):
return x**2
print(f(4))
>>>16
g = lambda x : x**2
print (g(4))
>>>16
def make_test(n):
return lambda x: x+n
f=make_test(2)
g=make_test(6)
print(f(42)) 44
print(g(46)) 52
3、偏函数(partial function): 偏应用函数是一个表达式,包含函数的部分参数。返回值是一个新函数
(1)例1:
from functools import partial
def mod(n,m):
return n%m
mod_by_100=partial(mod,100)
print(mod(100,7)) 2
print(mod_by_100(7)) 2
(2)例2:
from functools import partial
def test_partial(a, b, c, d):
print(a,b,c,d)
test1 = partial(test_partial,1,2)
test1(3,4)
>>>1,2,3,4
test2 =partial(test_partial,1,2,3,4)
test2(3)
>>>TypeError: test_partial() takes 4 positional arguments but 5 were given
test3 = partial(test_partial, d=4)
test3(1,2,3)
>>>1,2,3,4