我们要开车时,怎么办?先找一台车,这台车是配置好的,能上路的。我们不太可能去学造车,这需要很大的时间成本,当然对于汽车狂热者这是可以理解的!
为什么讲开车?函数也如此,我们不需要去写函数,函数是由其他人写好的,我们拿来用就好了,跟开车的道理一样。
函数有函数名、参数和返回值。函数很灵活,可以相互嵌套,可以在类中使用,还可以在模块中使用。(类,这个概念后面会重点讲)
语法:
def 函数名(形式参数):
函数体
return 返回值
形式参数:调用函数需要有变量接住传入的参数,它不是实际的数据,我们叫它形参。可以理解为车辆需要“司机”(自动驾驶除外,且目前自动驾驶还是需要司机的,以后可能...),这个“司机”这可以任何会开车的人,不是具体的某位司机。而传入的实际数据,我们叫实际参数,也就是某位具体驾驶车辆的司机。
# coding=utf-8
# 圆面积求解方法
def area(r): #r是形式参数
pi=3.1415926
area=(r**2)*pi
return area
x =int( input("请输入圆的半径:")) #x是实际参数
s = area(x)
print("圆的面积为:{}".format(s))
print("圆的面积为:{:.2f}".format(s)) #这里:.2f意思是小数点后保留2位,参照字符串格式化内容
调用函数:函数名(实际参数)
运行结果:
=== RESTART: C:\Users\Python\Python39\3.求圆面积.py ===
请输入圆的半径:4
圆的面积为:50.2654816
圆的面积为:50.27
>>>
把实际参数传入了函数体当中,得到运算结果。有两个参数时,可以给定两个实参,逗号隔开,想象一下求三角形面积,需要底和高两个参数。
另一种调用方法,直接将实参赋值给形参,放到我们需要结果的变量中。据三角形例子:
# coding=utf-8
# 给定底和高三角形面积求解方法
def area(d,h): #d和h是形式参数
area=(d*h)/2
return area
d1 = int( input("请输入三角形的底边:")) #d1,h1是实际参数
h1 = float(input("请输入三角形的高:"))
s_area = area(d=d1,h=h1)
print("三角形的底{0},高{1},面积为:{2}".format(d1,h1,s_area))
print("三角形的面积为:{:.2f}".format(s_area))
运行结果:
== RESTART: C:/Users/Python/Python39/4.求三角形面积.py ==
请输入三角形的底边:3
请输入三角形的高:4
三角形的底3,高4.0,面积为:6.0
三角形的面积为:6.00
这里注意两点,浮点数运算的变化,结果保留小数位数。这种写法啰嗦,但便于阅读。
(1)参数默认值
在函数定义时,可以给定默认值。
刚才圆面积的例子里,def(area="1"):就代表半径的默认值为1。这里不具体展示。
(2)可变参数
在参数前加*可将参数组装成一个元组。
#coding = utf-8
def sum(*s):
total = 0
for i in s:
total = i+total
return total
print(sum(0,1,2))
print(sum(10,20,30))
结果:
=== RESTART: C:/Users/Python/Python39/5.求和函数.py ===
3
60
在参数前加**可将参数组装成一个字典。
假如我们要造一个漫威角色
#coding=utf-8
def Marvel_Hero(**info):
for key,value in info.items():
print('{0}——{1}'.format(key,value))
Marvel_Hero(name='美队',combat='95',intelligence='90')
Marvel_Hero(H_name='钢铁侠',H_ability='99')
运行结果:
name——美队
combat——95
intelligence——90
H_name——钢铁侠
H_ability——99
多个参数的键和值以字典形式传入函数中。
(3)变量作用域
变量在函数中创建,作用域是整个函数,称为局部变量,变量在模块中创建,作用域是整个模块,称为全局变量。
试想一下,如果在模块中定义变量和函数中定义的变量名字相同,会发生什么?
首先,他两并不是一个变量,但是如果将函数中同名的局部变量,以global命名,会变成全局变量。类似权限提升。
#coding=utf-8
x = 1
def out_s():
global x #声明x为全局变量
x = 2
print('这里x为:{}'.format(x))
out_s( )
print('模块中x为:{}'.format(x))
运行结果:
==== RESTART: C:/Users/Python/Python39/3453.py ====
这里x为:2
模块中x为:2
>>>
你可尝试注释掉global这一行,你会发现结果变为2和1了。
注意变量的作用域在编程中会非常有用。
灵活使用函数还要了解一些内容,例如函数类型,filter函数和lambda函数等。