1.函数简介
- 函数也是一个对象
- 函数用来保存一些可执行的代码,在需要时可以重复调用
'''
语法:
def fn(形参1,形参2...):
代码块
'''
def fn():
print('这是第一个函数')
fn()
- 注意:函数名必须符合标识符命名规范(可以包含字母、数字、下划线,但不能以数字开头)
2.函数的参数
2.1形参和实参
- 形参(形式参数)定义形参就相当于在函数内部声明了变量,但是并不赋值
- 实参(实际参数)指定了形参,在调用函数时必须传递实参,实参将会给形参赋值,实参与形参数量应保持相同
'''
赋值——是调用时赋值,或者定义时赋值
可以在定义函数时,在括号里面定义数量不等的形参
函数定义时有形参,调用时也得有实参否则报错
'''
def s(a,b):
print(a+b)
s(5,6)
2.2函数的传递方式
- 默认值——定义形参时,可以为形参指定默认值,但是若调用时有实参,则默认值被覆盖
- 位置传参——将对应位置的实参赋值给对应位置的形参
- 关键字传参——可以不按照形参的位置传递参数,只要是按照形参的名称对应赋值即可
- 混合使用位置参数与关键字参数——位置参数必须在关键字参数之前
'''
默认值,c=10这个默认值,如果函数调用时另外传递实参,则不调用默认值,调用实参
如果函数调用时不传递这个实参,则调用默认值
即不传递实参,默认值生效
'''
'''
参数的传递方式
位置传参
关键字传参
'''
def fn( a, b, c=10):
print('a =', a)
print('b =', b)
print('c =', c)
fn(4, 5, 6)
fn(4, 5)
fn(b=4, c=5, a=6)
fn(1, 2, c=30)
'''
原理:形参和实参,位置传参和关键字传参
举例:
import requests
headers={}
url=''
requests.request(url, headers=headers)
'''
3.不定长参数
- 用于位置传参的*args,在定义函数时,在一个形参前加上*,则这个形参可以获取多个实参(多个实参存入元组中),
- 带*的形参可以和关键字传参配合使用,但是只能有一个
- 带*的形参不能处理关键字传参,关键字传参可以用带**的形参
- 用于关键字传参的 **kwargs,获取的多个实参是存入字典中,key=关键字传参中的实参名,value=关键字传参中的实参值
- 带**的形参只能有一个,必须写在最后
- 装包–存入元组或字典
- 解包–遍历元组或字典
def fn(a,b):
print(a+b)
fn(1, 2)
'''
装包:
通过*b的形式传递位置参数,将所有实参存入元组b中
'''
def fn1(*b):
print('b =', b, type(b))
fn1(1,2,3,4,5)
'''
解包:
遍历(通过*b存入元组中b)已经装包的实参,即遍历一个元组
'''
def s(*b):
r=0
for i in b:
r+=i
print(b,'各元素累加结果为:', r)
s(1,3,54,6,6)
'''
可以有多个参数,剩余元素统一装入*b
*b此类参数只能有一个
若*b不是最后一个参数,其后的参数必须使用关键字传参
*b形参,当实参都是关键字传参时,错误
**b将关键字实参装包人字典
即*形参不接收关键字参数,处理位置参数,**形参可以接收关键字参数,并处理
'''
def fn2(a,b,*c):
print('a =', a)
print('b =', b)
print('c =', c)
fn2(1,3,4,6,7,8,8)
def fn3(a,*b,c):
print('a =', a)
print('b =', b)
print('c =', c)
fn3(1,3,4,6,7,8,c=8)
def fn4(**b):
print('b =', b, type(b))
fn4(a=1,b=2,c=3)
def s1(a,c,**b):
print('a =', a)
print('b =', b)
print('c =', c)
s1(c=3,b=6,d=0,e=5,a=1,f=8)
s1(1,2,b=6,d=0,e=5)
'''
正规的写法:*args,**kwargs
def fn(*args,**kwargs):
语句块
'''
4.参数的解包
- 用于位置传参的*args在装包解包过程是通过元组、列表
- 用于关键字传参的 **kwargs在装包解包过程是通过字典
'''
参数t为元组、列表时通过*t可以将t中的元素依次赋值给函数中的形参,元素个数与形参个数必须一致
参数t为字典时通过**t可以将t中的k-v中的value值依次赋值给函数中的形参,k-v个数与形参个数必须一致
'''
def fn(a,b,c):
print('a =', a)
print('b =', b)
print('c =', c)
t={'a':1, 'b':2, 'c':3}
print(type(t))
fn(**t)