目录
- return语句
- 函数的参数传递
- 函数的缺省参数
- 形参定义方式
- 不定长参数
1. return语句
return 语句
语法 : return [表达式]
[...] 可以省略
作用 :
用于函数中,结束当前函数的执行,返回到调用该函数的地方
同时返回一个对象的引用关系
说明 :
1.return语句后跟的表达式可以省略,省略后相当于return None
2.如果函数没有return语句,则函数执行完最后一条语句后返回None
(相当于自动在最后加了一条 return None)
3.函数调用一定会返回一个对象的引用
eg:
#定义一个函数 input_number()
#此函数用来获取用户循环输入的整数,输入负数时结束
def input_number():
L = []
while True :
a = int(input('请输入整数,输入负数结束 :'))
if a < 0 :
return L
else :
L.append(a)
L = input_number()
print(L)
2. 函数的参数传递
python 函数的参数传递 :
传递方式 :
位置传递:
序列传参
关键字传参:
字典关键字传参
***位置传参***
实际参数(实参)的对应关系与形式参数(形参)的对应关系是按位置来依次对应的
说明:实际参数和形式参数通过位置进行传递匹配,实参个数必须与形参个数相同
eg :#位置传参
def myfun(a,b,c) :
print('a绑定',a,end = ' ')
print('b绑定',b,end = ' ')
print('c绑定',c,end = ' ')
myfun(1,2,3) #>>>a绑定 1 b绑定 2 c绑定 3
***序列传参***
序列传参是指在函数调用过程中,用*将序列拆解后按位置传参的方式进行参数传递
eg:#序列传参
def myfun(a,b,c) :
print('a绑定',a,end = ' ')
print('b绑定',b,end = ' ')
print('c绑定',c,end = ' ')
s = [1,2,3]
myfun(*s) # * 表示把s拆开
s2 = 'ABC'
myfun(*s2)
***关键字传参***
关键字传参是指传参时,按着形参的名称给形参赋值
实参和形参按名称进行匹配
eg:#关键字传参方式
def myfun(a,b,c):
print('a绑定',a,end = ' ')
print('b绑定',b,end = ' ')
print('c绑定',c,end = ' ')
myfun(b=22,a=11,c=33) #同 myfun(11,22,33)
说明:实参和形参可以不按位置匹配
***字典关键字传参***
是指实参为字典,将字典用 ** 拆解后进行关键字传参
eg:#字典关键字传参
def myfun(a,b,c):
print('a绑定',a,end = ' ')
print('b绑定',b,end = ' ')
print('c绑定',c,end = ' ')
d = {'c':33, 'b':22, 'a':11}
myfun(**d) #同 myfun(11,22,33)
说明:
1.字典的键名和形参名必须一致
2.字典键名必须为字符串
3.字典的键名要在形参中存在
函数的综合传参
函数传参方式,在能确定形参能唯一匹配到相应实参的情况下可以任意组合
eg :#综合传参
def myfun(a,b,c):
print('a绑定',a,end = ' ')
print('b绑定',b,end = ' ')
print('c绑定',c,end = ' ')
myfun(1,*[2,3])
myfun(**{'b':2,'c':3},a=1)
说明:先位置传参,后关键字传参
3. 函数的缺省参数
函数的形参(如何接受实参)
函数的缺省参数 :
语法 :
def 函数名(形参名1 = 默认参数1,
形参名2 = 默认参数2,...) :
...
说明 :
1.缺省参数必须从右至左依次存在,
如果一个参数有缺省参数,则其右侧的所有参数都必须有缺省参数
2.缺省参数可以有0个或多个,甚至全部都有缺省参数
eg:#以下失意函数的缺省参数
def info(name,age = 1,address = '未填写'):
print(name,'今年',age,'岁,家庭地址是 :',address)
info('LiMing',15)
#>>>LiMing 今年 15 岁,家庭地址是 : 未填写
info('小张',20,'北京市朝阳区')
#>>>小张 今年 20 岁,家庭地址是 : 北京市朝阳区
info('小赵')
#>>>小赵 今年 1 岁,家庭地址是 : 未填写
4. 形参定义方式
函数的形参定义方式 :
位置形参
星号元组形参
命名关键字形参
双星号字典形参
***位置形参***
语法:
def 函数名(形参名1,形参名2,...)
语句块...
***星号元组形参***
语法:
def 函数名(*元组形参名)
语句块...
作用:收集多余的位置参数
说明:元组形参名通常用 :'args'
eg:
def func(*args):
print('参数个数是:' , len(args))
print('args = ' ,args )
func(1,2,3,4)
func('hello','world',1,2,3,4)
***命名关键字形参***
语法:
def 函数名(*,命名关键字形参):
语句块...
def 函数名(*args,命名关键字形参):
语句块...
说明:所有的参数都必须用关键字传参或字典关键字传参传递
eg:
def fn(*,d,e):
print('d = ' d)
print('e = ' e)
fn(d=100, e=200) #合法调用
fn(1,2) #不合法,不能使用位置传参
***双星号字典形参***
语法:
def 函数名(**字典形参名) :
语句块...
作用 :收集多余的关键字传参
说明 :通常字典形参名定位 :'kwargs'
eg:
def func(**kwargs):
print('关键字参数个数是:',len(kwargs))
print('kwargs = ',kwargs)
func(name = 'A',age = 15)
#>>>关键字参数个数是: 2
#>>>kwargs = {'name': 'A', 'age': 15}
函数的参数说明 :
缺省参数,位置形参,星号元组形参,命名关键字形参和双星号字典形参可以混合使用
函数参数自左至右的顺序为:
位置形参
星号元组形参
命名关键字形参
双星号字典形参
eg :
def f1(a,b,*args,c,**kwargs):
print(a)
print(b)
print(args)
print(c)
print(kwargs)
f1(1, 2, 3, 4, d=6, c=5 ,e=7) #
f1(*'hello', d=6, **{'c':5, 'e':7})
5. 不定长参数
函数的不定长参数 :
def fn(*args, **kwargs) :
print(args)
print(kwargs)
fn()
fn(1,2,3,4)
fn(1,2,3,4,a=5,b=6,c=7)
#可以接收任意的位置传参和关键字传参
eg:模仿range函数构造myrange()函数 (step为正的情况)
def myrange(start, stop=None, step=1):
if stop is None :
stop = start
start = 0
L = []
i = start
while i < stop :
L.append(i)
i += step
return L
L = myrange(3)
print(L) #>>>[0, 1, 2]
L = myrange(3,6)
print(L) #>>>[3, 4, 5]
L = myrange(1,10,3)
print(L) #>>>[1, 4, 7]
练习 :
# 写一个函数myfun, 此函数用显示两个参数的相关信息
# 此函数给定两个参数,打印关于两个参数的信息:
# 1) 打印两个参数的最大值
# 2) 打印两个参数的和
# 3) 打印两个参数的积(相乘)
# 4) 打印从a开始到b结束的所有偶数:
def myfun(a,b):
max = a if a>b else b
L = []
for i in range(a,b+1):
if i % 2 == 0 :
L.append(i)
print('最大值是: ',max)
print('和是: ',a+b)
print('积是: ',a*b)
print(a,'到%d之间的偶数有:' % b, L)
# 完全数是指出自身以外,所有因数相加之和等于自身的数
# 如 1+2+3 = 6 ;1,2,3都是6的因数
def perfect_number():
i = 1
n = 0
while n<4 :
L = []
for j in range(1,i):
if i % j == 0:
L.append(j)
if sum(L) == i:
print(i,'是一个完全数')
i += 1
n += 1
else :
i += 1
perfect_number()
1. 素数prime函数练习
1) 写一个函数isprime(x) 判断x是否为素数,如果是素数,返回True,否则返回False
2) 写一个函数prime_m2n(m, n), 返回从m开始到n结束(不包含n)的范围内的素数列表
如:
L = prime_m2n(1, 10)
print(L) # [2,3,5,7]
3) 写一个函数primes(n), 返回指定范围内素数(不包含n)的全部素数的列表,并打印这些素数
如:
L = prime(20)
print(L) # [2,3,5,7,11,13,17,19]
1) 打印 100以内的全部素数
2) 打印 100以内全部素数的
def isprime(n): #判断是否为素数
a=0
if n < 2 :
return False
for i in range(2,n):
if n%i==0 :
a+=1
if a > 0 :
return False
return True
def prime_m2n(m, n): #返回[m,n)之间的素数列表
L = []
for i in range(m,n):
if isprime(i) :
L.append(i)
return L
def primes(n):
L = []
for i in range(2,n):
if isprime(i) :
L.append(i)
return L
L = primes(100)