Python 函数_参数

第6次预习课_函数

函数_好处
减少代码的重复编写
def f():
return

小练习1:
写一个除法函数,需要处理除数不能为0
def div(a,b):
if not isinstance(a,(int,float)):
return None
if not isinstance(b,(int,float)):
return None
if b == 0:
return None
return a/b

print(div(100,10))

小练习2
I am a 19 years old boy!666!
1 写一个函数,统计下数字的个数
s = “I am a 19 years old boy!666!”
def count_digits(s):
if not isinstance(s,str):
print(“the parameter is not a unicode string”)
return 0
result =0
for i in s:
if i in “0123456789”:
result+=1
return result

print(count_digits(s))

2 写一个函数,统计下字符的个数
s = “I am a 19 years old boy!666!”
def count_letters(s):
if not isinstance(s,str):
print(“the parameter is not a unicode string”)
return 0
result =0
for i in s:
if (ord(i)>=97 and ord(i)<=122) or
(ord(i)>=65 and ord(i)<=90):
result +=1
return result

print(count_letters(s))
3 统计下字母和数字个数之和
print(count_digits(s)+ count_letters(s)) #函数代码复用
4 统计下非字母和非和数字的个数

函数缺省值

函数局部变量
函数传入的参数为不可变的,对外部的变量就没有影响
按值传—传入的不是变量对应的内存地址
函数传入的参数为可变的,对外部的变量就有影响
按引用传—传入的是变量对应的内存地址

a= 100
def f(a):
… a+=1
… return a

f(a)
101

a
100

a=[]
def f(a):
… a.append(1)
… return a

f(a)
[1]

a
[1]

全局变量
使用函数外部的变量

函数_参数_默认参数
1 必选参数在前
2 有多个默认参数的时候,调用的时候,可以按照顺序提供默认参数
3 也可以不按顺序提供部分默认参数,当不按顺序提供部分参数时,需要把参数名协商

def f(a,b=1,c=2):
… print(a)
… print(b)
… print©
… return a+b+c

f(1)
1
1
2
4

f(b=4,c=5) # 必选参数必须在前
Traceback (most recent call last):
File “”, line 1, in
TypeError: f() missing 1 required positional argument: ‘a’

f(0,c=1,b=5) # 不按顺序提供默认参数
0
5
1
6

定义默认参数要牢记一点:默认参数必须指向不变参数

def add_end(l=[]):
… l.append(‘end’)
… return l

print(add_end())
[‘end’]

print(add_end())
[‘end’, ‘end’]

print(add_end())
[‘end’, ‘end’, ‘end’]

python函数在定义的时候,默认参数l的值就被计算出来了,在每次调用的时候,l参数一件变成前一次调用所更改了。

所有,避免在函数里面去修改函数的默认参数值
关键字参数

可变参数_*arg 这些可变参数在函数调用时自动组装成一个tuple
可变参数:传入的参数时可变的,可以是1个、2个…n个也可以是0个

def f(a,b,*arg):
… result = 0
… result = a+b
… for i in arg:
… result+=i
… return result

f(1,2,3,4,5,6.7)
21.7

f(1)
Traceback (most recent call last):
File “”, line 1, in
TypeError: f() missing 1 required positional argument: ‘b’

f(1,2,3)
6

f(1,2)
3

def f(*arg):
… for i in arg:
… print(i)

f(1,2,3)
1
2
3

可变参数_**kw 关键字参数在函数内部自动组装为一个dict

def f(a,b,**kw):
… print(type(kw))
… for i in kw:
… print(i)

f(1,2,c=3,d=4)
<class ‘dict’>
c
d

def f(a,b,**kw):
… print(type(kw))
… for k,v in kw.items():
… print(k,v)

f(1,2,c=3,d=4)
<class ‘dict’>
c 3
d 4

总结:

*arg:表示把可变的多个参数,转换成一个元组
**kw:表示把可变的多个命令参数,转换成一个字典

练习1
请使用**kw的方式,把可变的所有参数算个乘积

练习2:
同时使用*arg和**kw算下字母的长度之和,注意所有参数均使用字符串,字符串都是字母

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值