前几天学习了python的一些基础知识,比如:数据结构,了解了列表、元组、字符串、字典等,并了解学习了这些数据结构的一些方法,紧接着学习了一些语句,比如循环、if语句等,接着学习函数、参数等将在后面将用于抽象等经常用到的概念
1、函数
使用 def 定义函数,函数中的return语句非常重要,return语句是用来从函数中返回值的。有的函数并没有return,或者return语句后面并没有返回值,只用于函数结束
2、文档化函数(如果在函数开头写下字符串,他会作为函数的一部分进行存储)
>>> def square(x):
'Calculates the square of the number'
return x*x
>>> square.__doc__ #访问文档字符串
'Calculates the square of the number'
3、参数
形参:定义函数时,函数名后面的为形参,函数调用时,函数名后面的为实参
4、函数参数表达形式
a、位置参数
>>> def example(x,y,z,f): #位置参数
return x,y,z,f
>>> example('1',1,'a','a+b') #实参与形参 参数位置一一对应
('1', 1, 'a', 'a+b')
b、关键字参数
>>> def hello(name,age):
print('name:%s,age:%d'%(name,age))
return
>>> hello(name='lili',age=12) #在调用函数时,采用关键字,在参数中明确参数意义
name:lili,age:12
>>> def hello(name='lili',age=13): #也可以直接在定义函数的时候,给参数添加默认值,然后直接调用,也可在调用时设定参数不同的值
print('name:%s,age:%d'%(name,age))
return
>>> hello()
name:lili,age:13
位置参数和关键字参数也可联合使用,只是位置参数应该放在前面
5、收集参数
>>> def get_name(*names): #参数表示为*names,多加入一个*号
print(names)
return
>>> get_name('lili','anla','dd') #可传入3个参数
('lili', 'anla', 'dd')
>>> get_name('mm') #可传入1个参数
('mm',) #且参数返回为元组类型
如上述代码参数前加上一个*号作为参数,调用时则可传入多个实参,且元组形式返回。且可以与普通参数一起使用,用于上述提到的位置参数
>>> def get_info(**params): #参数前面加两个**
print (params)
return
>>> get_info(x=1,y=2,z=3)#以关键字参数的形式传入参数
{'y': 2, 'z': 3, 'x': 1} #以字典的形式返回参数
上述参数中参数前面加两个**,调用时可传入多个关键字参数,并返回字典形式
两种形式同样也可以一起使用,并且也可以烦着来用,在调用函数的时候作为实参使用,如下:
>>> def add(x,y):
return x+y
>>> params=(1,2)
>>> add(*params) #在调用函数时使用
>>> def get_info(name,age):
print('name is %s,age is %d'%(name,age))
return
>>> params={'name':'lll','age':12}
>>> get_info(**params)
name is lll,age is 12
6、作用域
全局变量 局部变量
globals()[‘parameters’] locals()[‘parameters]
递归
#采用递归的思想进行二分查找
def select_num(numbers,num,lower,upper):
if upper is None:
upper=len(numbers)-1
if lower==upper:
return numbers[lower]
else:
middle = (lower+upper)//2
if num > numbers[middle]:
return select_num(numbers,num,middle+1,upper)
else:
return select_num(numbers, num,lower,middle)
x=select_num(sorted([1,4,56,5,98,555,32,33,444,44]),5,0,None)
print('查找的数字为:%d'%x )
7、函数式编程:
map(func,seq[,seq...])#对序列中每个元素应用函数
filter(func,seq)#返回其函数为真的元素列表
reduce(func,seq)#其中函数参数必须为两个
lambda