函数的好处:复用,减少重复代码的编写。
小练习:
写一个除法的函数,且需要处理除数不能为0
#encoding=utf-8
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))
print(div(20,0))
print(div("a",10))
print(div(100,"b"))
执行结果:
I am a 19 years old boy!666!
1、写一个函数,统计一下一句话中数字的个数。
#encoding=utf-8
s = 'I am a 19 years old boy!666!'
def count_digits_in_a_sentence(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_in_a_sentence(s))
执行结果:
2、写一个函数,统计一下一句话中字母的个数。
#encoding=utf-8
s = 'I am a 19 years old boy!666!'
def count_letters_in_a_sentence(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)>=65 and ord(i)<=91) or\
(ord(i)>=97 and ord(i)<=122):
result+=1
return result
print(count_letters_in_a_sentence(s))
执行结果:
3、写一个函数,统计一下一句话中字母和数字的个数。
print(count_digits_in_a_sentence(s)+count_letters_in_a_sentence(s))
4、写一个函数,统计一下一句话中非字母和非数字的个数。
def count_non_alphabetnum_in_a_sentence(s):
count = len(s)
return count-(count_letters_in_a_sentence(s)+count_digits_in_a_sentence(s))
print(count_non_alphabetnum_in_a_sentence(s))
执行结果:
函数传入的参数为不可变的,对外部的变量就没影响。按值传----传入的不是变量对应的内存地址。
函数传入的参数为可变的,对外部的变量就有影响。按引用传----传入的是变量对应的内存地址。
练习:
写一个函数,使用可变参数,计算函数所有参数之和。
def f(a,b,*arg):
result = 0
result = a+b
for i in arg:
result+=i
return result
执行结果:
def f(a,b,**kw):
print(type(kw))
for k,v in kw.items():
print(k,v)
print(f(1,2,c=3,d=4,e=5))
执行结果:
*arg:表示把可变的多个非命名参数,转换成了一个元组
kw:表示把可变的多个命名参数,转换为了一个字典
练习:
1、请使用kw的方式,把可变的所有参数算一个乘积
def mul(a,b,**kw):
result = 1
result = a*b
for k,v in kw.items():
result*=v
return result
print(mul(1,2,c=3,d=4,e=5))
2、同时使用*arg和**kw,算一下字母的长度之和,注意所有参数均使用字符串,字符串都是字母。
def count_letter_length(a,b,*arg,**kw):
result = ""
result = a+b
for i in arg:
result += i
for k,v in kw.items():
result += v
return len(result)
print(count_letter_length("a","b","c","d","e",f="g",h="p",n="m"))