函数定义
普通函数定义
def func (a,b,c):
print('a = %s' % a)
print('b = %s' % b)
print('c = %s' % c)
调用
func (1, c = 2, b = 3)
可变长参数函数的定义
在参数的前面加 * ,定义可变长参数
def howLong (first, *other):
# 统计参数的个数,first是必传,参数个数为1
print(1 + len(other))
# 参数的个数可以随意
howLong('123','456','789')
函数的局部变量问题:
var1 = 123
def func ():
global var1 # 声明为全局变量之后,函数内部更改值后,函数外部也会改变
var1 = 456
print(var1)
func()
print(var1)
输出:
456
456
函数的迭代器和生成器
内置的迭代器:
list = ['123','456','789']
it = iter(list)
print( next(it) )
print( next(it) )
print( next(it) )
print( next(it) ) # error
输出:
123
456
789
自己制作迭代器,就是生成器
关键字yield
def frange(start,stop,step):
x = start
while x < stop:
yield x
x += step
for i in frange(10, 20 , 0.5):
print(i)
输出:
10
10.5
11.0
11.5
…
示例:
读取TXT文件,并全局查找的函数,使用了with优雅的代替try
def find_item (hero):
with open('sanguo.txt') as f:
data = f.read().replace('\n','')
name_num = re.findall(hero,data)
# print('主角 %s 出现 %s 次' %(hero,len(name_num)))
return len(name_num)
读取人物名称
hero_dict = {}
with open('name.txt') as namefile:
nameArr = namefile.read().split('|')
# print('姓名数组:%s' %nameArr)
for hero in nameArr:
hero_dict[hero] = find_item(hero)
print(hero_dict)