1.有参数函数
def count_letters(s):
"""此函数主要用于统计字符串中的字符个数"""
result=0
for i in s:
result+=1
return result
print(count_letters("hhuefla"))
print(count_letters("ehufe13jfef"))
练习:写一个函数,计算一个列表的数字类型的总和。
def count_list_letters(l):
if not isinstance(l,list): #判断传参是否为list。和java不一样,java传参有类型
return 0 #return 0被执行的话,那么函数后面所有代码不执行
result=0
for i in l:
if isinstance(i,int):
result+=i
return result
list1=[1,5,"3",3,"34r4"]
list2=['helle',11,3,'eva','2']
print(count_list_letters(list1)) #1+5+3=9
print(count_list_letters(list2)) #11+3=14
重点:函数的内部,一定要判断传入参数的类型是否期望的类型。如果不是,想清楚怎么容错。如果是,再继续计算。
***命名参数:命名参数必须在非命名参数的后面,否则报错
>>> def print_str(a,b):
... print (a)
... print (b)
...
>>> print_str("x","y")
x
y
>>> print_str(b="x",a="y")
y
x
>>> print_str(b="x","y") #报错原因:命名参数在前
File "<stdin>", line 1
SyntaxError: positional argument follows keyword argument
>>> print_str(a="x","y") ##报错原因:命名参数在前
File "<stdin>", line 1
SyntaxError: positional argument follows keyword argument
>>> print_str("x",a="y") #报错原因:重复传参
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: print_str() got multiple values for argument 'a'
>>> print_str("x",b="y")
x
y
2.无参数函数
def a():
for i in range(5):
print ("*"*(i+1))
a()
print("--------------")
print(a())
练习:写一个函数,返回五个随机字母。
import string
import random
def five_random_letters():
"""返回五个随机字母"""
s=[]
for i in range(5):
s+=random.choice(string.ascii_letters)
return("".join(s))
print(five_random_letters())
练习:通过参数控制返回长度
import string
import random
def random_letters(n):
"""返回n个随机字母"""
if not isinstance(n,int):
return ""
s=[]
for i in range(n):
s+=random.choice(string.ascii_letters)
return("".join(s))
print(random_letters(9))
#方法一:
import random
import string
def random_letters(n,type):
"""生成n个字母的随机字母
type类型为:lower(小写)和upper(大写)"""
if not isinstance(n,int):
return ""
if not(type =="lower" or type=="upper"):
return ""
if type=="lower": #使用random.sample(),随机取n个值,返回list
s=''.join(random.sample(string.ascii_lowercase,n))
else:
s=''.join(random.sample(string.ascii_uppercase,n))
return s
print(random_letters(5,"lower"))
print(random_letters(7,"upper"))
#方法二:
import random
import string
def random_letters(n,type):
"""生成n个字母的随机字母
type类型为:lower(小写)和upper(大写)"""
if not isinstance(n,int):
return ""
if not(type =="lower" or type=="upper"):
return ""
s=''
for i in range(n):
if type=="lower":
s+=chr(random.randint(97,122))
#s += str(random.choice(string.ascii_lowercase))
else:
#s+=chr(random.randint(65,90))
s += str(random.choice(string.ascii_uppercase))
return s
print(random_letters(5,"lower"))
print(random_letters(7,"upper"))
3.内置函数
注:内建函数可以被覆盖,所以不要用内建函数命名
type(sum)
<class 'builtin_function_or_method'>
sum([1,23])
24
sum=1 #用内置函数命名,导致内置无法使用
sum([1,23])
Traceback (most recent call last):
File "<input>", line 1, in <module>
TypeError: 'int' object is not callable
del sum #恢复内置函数
sum([1,23])
24