python 函数(三)
函数
特点:复用性强,可以重复完成某个功能的代码块。
语法:define 定义
提高函数的复用性-------实现参数化(定义时:形参/位置参数,调用时:实参)
def 函数名(参数1,参数2,参数3.....):
#函数代码块
函数的调用: 函数名()
例子
def hi():
print("hello world!")
hi()
结果 hello world!
def hi(name,content):
print("{0}说:{1}".format(name,content))
hi('张三',"hello world!")
结果 张三说:hello world!
注:
- 函数可无参数可多个参数。
- 定义函数时,有几个参数调用时就要传几个参数。
- 默认参数,位置必须放在位置参数的后面否则报错
- 默认参数可以设置多个
- 调用函数的时候,按顺序赋值
- 调用函数时可以强制指定参数的赋值。
- return关键字 返回一个值给调用者,使用变量接收,函数结束的标志,-灵活调用函数
写函数步骤:
①先用零散的代码写出功能。(选取一组数据完成功能)
②把代码变成一个函数def 函数名()
③利用方法提高函数的复用性
例子:求和
def add(m,n):
sum=0
for item in range(m,n+1):
sum+=item
print(sum)
add(1,100)
参数:两种参数:动态参数和关键字参数
①动态参数 *args arguments 不定长参数
例子:
def add(*args):
print("数据类型为:",type(data))
sum=0
for item in args:
sum+=item
return(sum)
data=[1,2,3,4]
res=add(*data) #加一个*掉一层,元组类型
print(res)
结果
数据类型为: <class 'list'>
10
②关键字参数(指针对字典就行处理):传递参数时 形式为字典形式即: key=value 形式 要求形式以字典形式传入时使用
例子:
def dict_datas(**kwargs):
print("kwargs的值是",kwargs)
print("kwargs的类型是:",type(kwargs))
dict_datas(name="张三",age=18)
结果
kwargs的值是 {'name': '张三', 'age': 18}
kwargs的类型是: <class 'dict'>
def dict_datas(**kwargs):
print("kwargs的值是",kwargs)
print("kwargs的类型是:",type(kwargs))
d={"name":"李四","age":20}
dict_datas(**d)
结果
kwargs的值是 {'name': '李四', 'age': 20}
kwargs的类型是: <class 'dict'>
注:
1.动态参数和关键字参数不传值也可以调用函数,结果为空值。位置参数调用时必须有实参传入。
2.参数的混合使用,默认值参数放到位置参数后和动态参数无关,不能放在关键字参数之后,一般:位置参数--默认参数--动态参数--关键字参数。
例子
def datas(a,b,c=1,*args,**kwargs):
print("a+b+c的和是:",a+b+c)
print("*args的值是:",args)
print("**kwargs的值是:",kwargs)
datas(1,2,3,4,5,6)
结果
a+b+c的和是: 6
*args的值是: (4, 5, 6)
**kwargs的值是: {}
def datas(a,b,c=1,*args,**kwargs):
print("a+b+c的和是:",a+b+c)
print("*args的值是:",args)
print("**kwargs的值是:",kwargs)
datas(1,2,3,x=2)
结果
a+b+c的和是: 6
*args的值是: ()
**kwargs的值是: {'x': 2}
3. 变量的范围 局部变量和全局变量
①局部变量和全局变量同时存在时函数优先调用局部变量
a=7
def add(b):
a=10
print("函数内部a的值:",a)
print("b的值是:",b)
add(100)
结果
函数内部a的值: 10
b的值是: 100
②局部变量只能在函数内部调用不能在函数外部使用。
③如果函数内部涉及到修改全局变量,必须在修改前进行声明。global声明它为全局变量
4. 函数间的相互调用