您的位置:首页 > 编程语言 > Python开发

python之函数详解

2020-03-28 20:07 218 查看

1、函数是什么?
函数是指人为事先组织好的,可重复利用的,用来实现单一或相关联功能的程序代码段。函数能在一定程度上提升某种应用的模块性,保证了代码的重复利用率!


ps:以下代码需要自己写哦,我没有给出执行结果!如有bug或不足之处,欢迎下方评论指出哦!

1.1、自定义函数语法

def 函数名(参数1,参数2,参数3……参数n):
函数体(语句块)
return [表达式]

1.2、函数的参数
1.2.1、必须参数(位置参数):他必须以正确的顺序传入函数,同时调用函数时参数的数量必须和声明的一样。
1.2.2、默认参数:调用函数时,若没有传递参数,则会使用默认值,注意默认值必须在最右端,否则会报错。
1.2.3、可变参数:在定义时传入的参数个数是可变的,将以list或tuple形式传递。
1.2.4、关键字参数:,可以传入任意不受限制的关键字参数,以dict形式传递格式为:**kw
1.2.5、命名关键字:只能传递 “*” 后面名字的参数。

def fun_print(a,b,c=0,*,d,**kw):
#函数定义中有必选参数a和b,默认参数c,命名关键字参数d,关键字参数**kw
print('a=',a,'b=',b,'c=',c,'d=',d,'kw=',kw)
fun_print(1,2,d=3,e=5)

1.2、函数的特征
1.2.1、切片:python提供的切片操作符是指在序列名后跟一个一个方括号,方括号中有一对可循的参数并用冒号分隔本质是获取左闭右开的自己;字符串也可以看成一种list,每个元素就是一个字符;另外python支持负数进行倒数切片。

arr = ['a','b','c','d','e']
#直接取法
print(arr[0],arr[1],arr[2])#元素个数增多,实现困难
#循环取法
r=[]
n=3
for i in range(n):
r.append(arr[i])
print(r)
#python切片法
print(arr[0:3])
#倒数切片
print(arr[-1:])
#对于有序列结构的数据来说,切片操作方法为
consequence[start_index:end_index:step]

1.2.2、迭代:就是一次重复的过程,不断将上一次的输出结果作为下一次输入或初始值。只要是可迭代对象,无论有无下标,都可以迭代。

L = ['steven','kate','jack']
#第一种方法
for i in range(len(L)):#遍历下标
print('hello',L[i])#打印元素下标对应的list值
#第二种方法
for i in L:#遍历元素
print('hello',i)#打印元素
#遍历无下标的dixt
d = {'a':1,'b':2,'c':3}
for key in d:
print(key)
"""默认情况下,dict迭代的是key。如果要迭代value,可以用for value in d.values():
如果要同时迭代key和value可以用for key,value in d.items():"""
for value in d.values():
print(value)
for key,value in d.items():
print(key,value)
#python中的内置函数enumerate函数可以把一个list变成索引-元素对。
E = ['steven','kate','jack']
for i,value in enumerate(E):
print(i,value)

1.2.3、列表生成器:即 list comprehensions,是python内置的非常简单的取功能强大的用来创建list的生成式。
基础语法是:[operation for iter_var in iterable]。
前面为运算,后面跟一个迭代 。首先迭代iterable里的所有内容,每一次迭代都将iterable里相应的内容存放在iter_var中,再在表达式exp中应用该iter_var的内容,最后用表达式的计算值生成一个新列表中。是不是有点复杂?上代码!!!

[x * x for x in range(1,10)]#生成一个平方列表
[x * x for x in range(1,10) if x % 2 == 1]#在for后面加上条件判断,只生成奇数
[v+g for v in 'adc' for g in 'awm']#将字符串'adc'与'awm'形成全排列

1.2.4、生成器
一般来说,通过列表生成式,用户可以直接创建一个列表,但那样列表容量有限,而且比较耗费内存。那怎么办呢?python中支持一种边循环边计算的机制,称为生成器,在循环的过程中不断推算出后续的元素就不必创建完整的list,从而节省大量空间。

1 #直接生成法:把列表生成式的[]该为()
L = [x * y for x in range(1,5) for y in range(5,9)] #L是一个列表生成式
print(L)
g = (x * y for x in range(1,5) for y in range(5,9))#g是一个object,所可以使用for循环
for i in g:
print(i,end=' ')

如果生成器推算的算法比较复杂时,用列表生成式的for循环无法实现,那么就可以使用python中的yield函数。yield是一个生成器,但此时它是一个返回迭代的函数(迭代上面讲了哦!),只能用于迭代操作。有点迷糊?上代码!!!

定义一个生产器,返回一组奇数序列
def odd(n):
while n>0:
if n%2 == 1:
yield n #形如n = (x for x in range(5) if x%2 ==1)
n -= 1
for i in odd(5):#调用生成器函数
print(i)

1.2.5、迭代器
迭代是python中最强大的功能之一,是访问集合元素的一种放式。很多对象都可以通过for循环语句来直接遍历,如list、string、dict等,这些对象称为可迭代对象。

可迭代对象分为两类:一类是集合数据类型如list、tuple、dict、set、str称为iterable对象;一类是生成器,包括生成器和带yield的生成器称为iterator对象
那么主角迭代器是什么呢?迭代器是一个可以对集合进行迭代访问的对象,这种方式不需要将集合全部载入内存中,正因如此,这种集合元素几乎是无限的。迭代器对象从的第一个元素开始访问,知道所有的元素访问结束,迭代器之往前不会退后。

1 #用iter()创建迭代器
L = [5,6,7,8,9]
it = iter(L) #用iter创建迭代器对象
for i in it:
print(i,end=' ')

2#用next()创建迭代器,用next()获取迭代器对象的值
L = (x * x for x in range(5))#一个生成器作为一个可迭代对象iterator
it = iter(L)#用lier()创建迭代器对象
while True:
try:
print(next(it))#用next()获取下一个值
except StopIteratorion:
#遇到StopIteraortion就退出循环
break

为了便于理解,我们再来写一个函数,用于生成杨辉三角

def triangles_yanghui():
L = [1] #定义只有一个元素的列表
while True:
yield L #定义为生成器函数
#生产列表,用于列表生成式生成每列函数
L = [1] + [L[i-1] + L[i] for i in range(1,len(L))] + [1]
#i为元素下标对应数哦
n = 0
for t in triangles_yanghui():#调用三角函数
print(t)
n = n + 1
if n == 10:#给定打印行数
break
  • 点赞 1
  • 收藏
  • 分享
  • 文章举报
小天呀 发布了6 篇原创文章 · 获赞 3 · 访问量 765 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: