什么是函数:一系列Python语句的组合,可以在程序中运行一次或者多次,一般是完成具体的独立的功能
为什么要使用函数:
代码的复用最大化以及最小化冗余代码,整体代码结构清晰,问题局部化
函数定义:
def 函数名():
函数体[一系列的python语句,表示独立的功能]
函数的调用:
本质上就是去执行函数定义里面的代码块,在调用函数之前 必须先定义
参数的分类:
必选参数、默认参数(缺省参数)、可选参数、关键字参数
参数:其实就是函数为了实现某项特定的功能,进而为了得到实现功能所需要的数据
(其实是为了得到外部数据的
# 1 必选参数(必须赋值的,就是有形参的函数) def sum(a, b): # 形式参数:只是意义上的一种参数,在定义的时候是不占内存地址的 sum = a + b print(sum) pass # 2 默认参数(缺省参数) 始终存在与参数列表的尾部 def sum1(a, b = 4): print("默认参数的使用 = %d"%(a + b)) pass # 3 可选参数(用*来定义,当参数的个数不确定的时候使用比较灵活) def getComputer(*args): # *args就是可变长的参数 ''' 计算累加和 :param args: 可变长的累加和 :return: ''' result = 0 # print(args) for item in args: result += item pass print('result = %d'%result) pass getComputer(1,2,3) getComputer(1,2,3,4,5) # 4 关键字可变参数(用**来定义),在函数体内,参数关键字是一个字典类型。key是一个字符串 def keyFunc(**kwargs): print(kwargs) pass # keyFunc(1,2,3) 不可以的 dictA = {"name":'Leo', "age":35} keyFunc(**dictA) keyFunc(name = 'Peter', age = 26) # 5 连起来 def complexFunc(*args, **kwarg): ''' 可选参数必须放到关键字可变参数之前 可选参数:接受的数据是一个元组类型 关键字可选参数接受的数据是一个字典类型 :param args: :param kwarg: :return: ''' print(args) print(kwarg) pass complexFunc(1,2,3,4, name = 'Leo') complexFunc(**dictA) # 6 函数返回值 def sum2(): li = [] i = 1 while i < 10: li.append(i) i += 1 pass return li pass ''' 这里可以返回数组、元组、字典等类型 ''' print(type(sum2())) print(sum2()) # print(type(sum2())) # print(sum2()) # # result = 6 # result = 15 # {'name': 'Leo', 'age': 35} # {'name': 'Peter', 'age': 26} # (1, 2, 3, 4) # {'name': 'Leo'} # () # {'name': 'Leo', 'age': 35} # <class 'list'> # [1, 2, 3, 4, 5, 6, 7, 8, 9]
global函数
name = 'Leo' hobby = 'basketball' age = 29 def print1(): print('-------------------IN PRINT1---------------------') global name name = 'Mr Wang' print(name) pass def print2(): print('-------------------IN PRINT2---------------------') name = 'Mr Du' print(name) pass def defpro(): global pro pro = 'teacher' pass def print3(): print('{} {} {}'.format(name, hobby, age)) pass def print4(): print('{}'.format(pro)) pass print('--------------------IN MAIN-----------------------') print3() print1() print3() print2() print3() defpro() print3() print4() # --------------------IN MAIN----------------------- # Leo basketball 29 # -------------------IN PRINT1--------------------- # Mr Wang # Mr Wang basketball 29 # -------------------IN PRINT2--------------------- # Mr Du # Mr Wang basketball 29 # Mr Wang basketball 29 # teacher
匿名函数
# 匿名函数 # 语法: # lambda 参数1, 参数2, 参数3:表达式 # 特点: # 1、使用lambda来创建函数 # 2、没有名字的函数 # 3、冒号后面的表达式只有一个,注意:是表达式,不是语句 # 4、匿名函数自带return,而return后面的结果就是表达式计算后的结果 # 缺点: # lambda只能是单个表达式,不是一个代码块,lambda的设计就是为了满足简单函数的场景,仅仅能封装有限的逻辑,复杂逻辑实现不了只能用def来处理 def computer(x,y): ''' 计算两个变量的和 :param x: :param y: :return: ''' return x + y # 对应的匿名函数 M = lambda x, y:x+y # 通过变量调用匿名函数 print(M(29,4)) print(computer(29,4)) MAX = lambda x, y:x if x > y else y print(MAX(656,5)) # x**y表示x的y次方 # 33 # 33 # 656
序列操作
str 元组、 list
all()
result:bool 对象中的元素除了是 0、空、FALSE 外都算 TRUE,所有的元素都为True,结果就为True
any()
result:bool 类似于逻辑运算符 or的判断,只要有一个元素为True 结果就为True
print(all(('',4,56,[43]))) # False print(any(('',4,56,[43]))) # True
sort 和sorted
li=[2,45,1,67,23,10] # 原始对象 # li.sort() #list的排序方法 直接修改的原始对象 li = [1,345,65,76,2,8,3,4,7] print('-----------------排序之前--------------{}'.format(li)) li1 = li2 = li li1.sort() print('----------------li1排序之后------------{}'.format(li1)) lis = sorted(li2,reverse = True) # reverse代表倒序,故True为倒 print('----------------li2进行倒序排序之后-----{}'.format(lis)) # -----------------排序之前--------------[1, 345, 65, 76, 2, 8, 3, 4, 7] # ----------------li1排序之后------------[1, 2, 3, 4, 7, 8, 65, 76, 345] # ----------------li2进行倒序排序之后-----[345, 76, 65, 8, 7, 4, 3, 2, 1]
zip()
就是用来打包的,会把序列中对应的索引位置的元素存储为一个元组
函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表
如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表
zip函数 https://blog.csdn.net/zbrj12345/article/details/80372954
s1=['a','b','c'] s2=['你','我','c他','peter'] s3=['你','我','c他','哈哈','呵呵'] print(list(zip(s1))) # 压缩一个数据 zipList=zip(s2,s3) # 两个参数 print(list(zipList)) print(zip(s1, s2, s3)) print(*zip(s1, s2, s3)) # [('a',), ('b',), ('c',)] # [('你', '你'), ('我', '我'), ('c他', 'c他'), ('peter', '哈哈')] # <zip object at 0x000001DFEBA31A00> # ('a', '你', '你') ('b', '我', '我') ('c', 'c他', 'c他')
def printBookInfo(): ''' zip 函数的使用 :return: ''' books=[] #存储所有的图书信息 id=input('请输入编号: 每个项以空格分隔') #str bookName = input('请输入书名: 每个项以空格分隔') #str bookPos = input('请输入位置: 每个项以空格分隔') idList=id.split(' ') nameList = id.split(' ') posList = id.split(' ') bookInfo=zip(idList,nameList,posList) #打包处理 for bookItem in bookInfo: ''' 遍历图书信息进行存储 ''' dictInfo={'编号':bookItem[0],'书名':bookItem[1],'位置':bookItem[2]} books.append(dictInfo) #将字典对象添加到list容器中 pass for item in books: print(item) printBookInfo() # 请输入编号: 每个项以空格分隔1 2 3 # 请输入书名: 每个项以空格分隔harrypotter dargenraja thesummer # 请输入位置: 每个项以空格分隔A1 B2 C3 # {'编号': '1', '书名': '1', '位置': '1'} # {'编号': '2', '书名': '2', '位置': '2'} # {'编号': '3', '书名': '3', '位置': '3'}
enumerate 函数
用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,般用在 for循环当中
listObj = ['a','b','c'] for index, item in enumerate(listObj, 5): # 5表示索引开头数字 print(index, item) pass dicObj = {} dicObj['name'] = '李易峰' dicObj['hobby'] = '唱歌' dicObj['pro'] = '艺术设计' for item in enumerate(dicObj): print(item) # 5 a # 6 b # 7 c # (0, 'name') # (1, 'hobby') # (2, 'pro')