一、函数的特性和定义
"""
函数特性:
1、功能性
2、隐藏细节,方便调用
3、避免编写重复代码(可复用性)
"""
a = 1.12386
print(round(a,2))
#函数的定义
#1、可以无参数
#2、可以通过return来返回一个值,如没设置return则默认返回值为None
def funcname(parameter_list):
pass
#示例1,实现两个数字的相加
def add(a, b):
return a+b
print(add(18,92))
#示例2,重写一个print函数
def myprint(code):
print(code)
myprint("hello world!")
二、多个返回值的函数
def damage(skill1, skill2):
d1 = skill1 * 3
d2 = skill2 * 2 + 10
return d1, d2 #多个返回值实际返回的是一个元组,但不需要强制加括号
damages = damage(1, 2)
print(type(damages), damages)
damages1, damages2 = damage(2, 3) #一般可以这样获取,这种方式也称为序列解包
print(damages1, damages2)
#也可以如下,但不推荐——并不知道函数返回值的特定意义
print(damage(10, 12)[0], damage(100, 180)[1])
#序列解包
# a, b, c = 1, 2, 3
#也可以如下方式
d = 1, 2, 3
a, b, c = d
print(type(d), a, b, c)
#如果序列解包的数量不匹配,系统会报错
#e, f = d
三、必须参数和关键字参数
#必须参数:是指在调用时候必须要传参的
def add(x, y): #这里的x,y就是函数代码内必须要用的参数,即称为必须参数
result = x + y
return result
#关键字参数
#可以在调用的时候不依据函数定义时的顺序,可以通过形参名赋值的形式明确指出
#顺序也可以与函数定义时不同
#关键字参数主要是增加代码可读性
c = add(y = 3, x = 2) #用形参名明确赋值,顺序与定义时不一样,方便阅读和理解
print(c)
四、默认参数
#三、默认参数
#函数调用时部分参数可在定义时设置默认值,调用时实参可以不传递此参数
#当该形参的实参不是默认值时,则调用时必须传参设置
#函数定义时,默认参数必须放在参数列表最后
#多个默认参数时传某一个或某几个参数时,需要使用关键字参数
def print_student_diles(name, gender="男", age=18, college="人民路小学"):
print("我叫" + name)
print("我是" + gender + "生")
print("我今年" + str(age) + "岁")
print("我在" + college + "上学")
print_student_diles("鸡小萌", "男", 18, "人民路小学")
print_student_diles("郎小华")
print_student_diles("马大哈", "男", 18, "梨花小学")
print_student_diles("李乐",age = 20)
五、可变参数和关键字可变参数
#四、可变参数
#可变参数用于传递一系列数量不确定的参数
#也可以整体传递一个元组或列表
#必须参数必须在可变参数之前
#默认参数必须在参数列表最后
def demo(*param):
print(param)
print(type(param))
demo(8, 9, 10, 11, 12)
a = (1, 2, 3, 4)
demo(*a)
def demo1(p1, *p2, p3 = 2):
print(p1)
print(p2)
print(p3)
demo1("a", 10, 11)
demo1("abc", 1, 2, 3, 4, 5, p3 = 36)
#五、关键字可变参数
#支持任意个数的关键字参数
def city_temp(**param):
for k,value in param.items():
print(k,":",value)
print(type(param)) #可以发现参数实质为字典类型
#直接用关键字传参
city_temp(bj = "29c", sh = "32c", gz = "31c", nj = "34c")
#也可以通过“**”直接将一个字典传给函数
a = {"wh":"35c", "cq": "34c", "nc": "33c"}
city_temp(**a)