1 函数的特性
- 功能性
- 隐藏细节
- 避免编写重复的代码
2 函数的定义及运行特点
使用def来定义函数;
def funcname(parameter_list):
pass
- 参数列表可以没有
- 使用return value来返回函数值,否则返回None
- 改变程序递归的次数
import sys
sys.setrecursionlimit(xxxx)
当函数返回多个结果时,最好的方式是使用多个变量名来接收:
def damage(skill1,skill2):
damage1 = skill1*2
damage2 = skill2*3+10
return damage1,damage2
skill1_damage,skill2_damage = damage(4,2)
print(skill1_damage,skill2_damage)
序列解包:用有意义的变量名称来返回函数的有效值。
3 必须参数与关键字参数
(注意是在函数调用上而不是定义上)
1. 必须参数:函数的参数列表中定义的必须赋值的参数。必须放在参数列表的前面。
2. 关键字参数:可以在函数调用时明确指出实参是传给哪个形参的,不一定要按照形参顺序。可以大大提高阅读代码的效率。
def add(x,y):
result = x+y
return result
c = add(y=3,x=2) # 此处就用了关键字参数
- 默认参数:没有设置默认值的参数必须传递实参。
def student(name,age=18,sex='boy'):
print("My name is "+name+". I'm "+str(age)+", and I am a "+sex+".")
student('Tom')
student('Lilly',sex='girl')
打印结果如下:
4. 可变参数:在参数列表前加一个*,在传递实参时就可以输入多个实参,并且结果是输出一个元组。
def demo(*param):
print(param)
demo(1,2,3,4,5,6,7,8)
打印结果如下:
- 关键字可变参数:
def squsum(*param): # 可变参数
sum = 0
for i in param:
sum += i*i
print(sum)
squsum(1,2,3)
def city_temp(**param): # 关键字可变参数
print(param)
print(type(param))
for key,value in param.items(): # 字典的遍历需要调用它的items()方法
print(key,':',value)
city_temp(bj='32c',xm='23c',sh='31c')
# 当然字典也可以直接来传参
a = {'xa':'16c','nt':'12c','ng':'15c'}
city_temp(**a)
变量作用域
全局变量:函数外部定义的,函数内部也可以使用
局部变量:函数内部定义的,函数外部不可以使用
* for,while,if内部的变量是可以在循环外被引用的(python特有)
global关键字
在局部变量前加global关键字可以将其转变为全局变量
def demo():
global c
c = 2
demo()
print(c)