1. 函数的定义:
1 . 含义:我们把实现某一功能的代码定义为一个函数,在需要使用时,随时调用,十分方便。对于函数,简单理解就是可以完成某功能的代码块,可反复使用。
Python提供了许多内建函数,比如print()。也可以自己创建函数,这被叫做用户自定义函数。
2 . 建立一个函数:
def functionname([parameterlist]):"""comments"""founctionbody含义:
functionname:为函数名,可以自定义,在调用函数时使用。
parameterlist:为可选参数,用于指定向函数中传递的参数。如果有多个参数,各个参数间用逗号(,)隔开,如果不指定,则表示该函数没有参数。
comments:函数指定注释,注释内容为其功能,传递的参数的作用等,让人能快速了解该函数
founctionbody:为实现功能的语句块
3 . 调用函数:
def hello():print('hello')print('python')# 通过函数名来调用函数
hello()运行结果:
hello
python
4 . 函数的镶套:
def westos():print('is westos')def python():print('is python')python()
westos()运行结果:
is westos
is python
2 . 参数传递
函数参数的作用是传递数据给函数使用,函数利用接收的数据进行具体的操作处理。
区别形式参数和实际参数
形式参数:简称形参,定义函数时写的参数叫形参。
实际参数:简称实参,调用函数时写的参数。
def func(形参) #定义func函数passfunc(实参) #调用func函数
形参:位置参数 默认参数 可变参数 关键字参数
1 位置参数:
def func(name,score):print(name+'的成绩为:'+score+'分')func('小李','98')运行结果:
小李的成绩为:98分
2 默认参数
在定义函数的时候,给定一个参数默认值,当调用函数的时候,如果没有给该形参传入实参,则使用该默认值进行运算。
def add(x,y=10): # 定义函数,其中第二个形参的默认值为10print(x+y)
add(5,3) # 当调用函数的时候,传入两个实参,则使用传入的值进行运算
add(5) # 当只传入一个值的时候,另一个使用默认参数值进行运算运行结果:
8
15
3 可变参数
当参数的个数不确定的时候,可以使用可变参数,来表示该函数可以接收任意个参数
在使用可变参数的时候:
其中*a 表示对参数进行解包,将序列中的元素一个一个的拿出来。
a的对象类型是一个元组。
def mysum(*a): # 定义函数的形参数是任意个print(*a)print(a)sum = 0for item in a:sum += itemprint(sum)
nums = [1,2,3,4]
nums1 = (1,2,3,4)
nums2 = {1,2,3,4}
mysum(*nums)
mysum(*nums1)
mysum(*nums2)运行结果:
当实参是一个列表的时候,返回值
1 2 3 4 # 解包列表的得到的数据
(1, 2, 3, 4) # a的对象类型为一个元组
10 # 最后的返回值当实参是一个元组的时候,返回值
1 2 3 4 # 解包元组的得到的数据
(1, 2, 3, 4) # a的对象类型为一个元组
10 # 最后的返回值当实参是一个集合的时候,返回值
1 2 3 4 # 解包集合的得到的数据
(1, 2, 3, 4) # a的对象类型为一个元组
10 # 最后的返回值
4 关键字参数
关键值参数是指使用形参的名字来确定输入的参数值。
def func(name,score):print(name+'的成绩为:'+score+'分')func(score='100',name='redhat') #顺序并没有一致运行结果:
redhat的成绩为:100分
3. 函数的返回值
返回值:函数运算的结果,还需要进一步操作,给函数一个返回值
return用来返回函数执行的结果,如果函数没有返回值,默认返回None
一旦遇到return 函数执行结束,后面的代码不会执行
多个返回值的时候,python会帮我们封装成一个元组类型
def getStuInfo(name,age):print(name)print(age)
a = getStuInfo('redhat',16)
print(a)运行结果:
redhat
16
None # 函数没有返回值,函数执行的结果默认返回None
当函数存在返回值的时候,一旦遇到return 直接结束 后面的代码就不会在再执行。
def getStuInfo(name,age):print(name)if name == 'redhat' :return 'name is redhat' # 函数的返回值print(age)
a = getStuInfo('redhat',16)
print(a)运行结果:
redhat
name is redhat # 存在返回值,并且成功返回该返回值,之后的代码将不会再执行
4 . 作用域
变量的作用域指程序代码能访问该变量的区域,一般根据‘有效范围’,将变量分为“局部变量”和“全局变量”。
变量的作用域决定了在哪一部分程序可以访问哪个特定的变量名称。Python的作用域一共有4种,分别是:
L (Local) 局部作用域
E (Enclosing) 闭包函数外的函数中
G (Global) 全局作用域
B (Built-in) 内置作用域(内置函数所在模块的范围)
total = 0 # 这是一个全局变量
def sum(arg1, arg2):# 返回2个参数的和total = arg1 + arg2 # total在这里是局部变量.print("函数内是局部变量 : ", total)return total# 调用sum函数
sum(10, 20)
print("函数外是全局变量 : ", total)运行结果:
函数内是局部变量 : 30
函数外是全局变量 : 0
练习:
案例1:
编写一个函数cacluate, 可以接收任意多个数,返回的是一个元组.
元组的第一个值为所有参数的平均值, 第二个值是大于平均值的所有数.
def cacluate(*x):sum = 0for i in x :sum += iaverage = sum/len(x)li = []for k in x :if k > average :li.append(k)return (average,li)
案例2:
编写一个函数, 接收字符串参数, 返回一个元组,‘ehllo WROLD’
元组的第一个值为大写字母的个数, 第二个值为小写字母个数.
def count(s):upper_c = 0lower_c = 0for i in s :if i.isupper() :upper_c +=1if i.islower() :lower_c +=1return (upper_c,lower_c)
print(count(input(':')))
题目:两个乒乓球队进行比赛,各出三人。
甲队为a,b,c三人,乙队为x,y,z三人。
已抽签决定比赛名单。有人向队员打听比赛的名单。
a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。
team = ['x','y','z']
all_order = []
for i in team :for k in team :if k != i :for m in team:if m !=k and m !=i :all_order.append([i,k,m])
for t in all_order :if t[0] !=team[0] and t[2] != team[0] and t[2] != team[2] :print('a — %s ; b — %s ; c — %s ' %(t[0],t[1],t[2]))