一、函数
1. 函数基础知识(上)
1.1函数定义
1.2函数形式及调用
1.3函数参数
1.4函数嵌套
1.5实战示例
2.1全局变量和局部变量
2.2函数参数的引用和传值
2.3匿名函数
2.4递归函数
3.1内置函数查询
3.2数学运算内置函数
3.3数据类型转换内置函数
3.4序列操作
3.5内置集 合函数
1.1函数定义
1.2函数形式及调用
#形式def fun():print('好好学习,天天向上')#调用fun()
1.3函数参数
a.概念
通过返回的函数参数,输出不同信息。(参数:为了得到实现某种功能所需的外部数据)
形参:是定义函数时在括号里定义的变量,它只是申明用的,是没有值的。
实参:是调用函数时传给形参的值,是有值的。实参是形参被具体赋值之后的值,参加实际的运算,有实际作用。
示例:
def printInfo(name,height,weight,hobby):#形式参数:定义时候不占内存。意义上的参数#函数代码块print('%s的身高是%fm'%(name,height))print('%s的体重是%fkg'% (name, weight))print('%s的爱好是%s'% (name, hobby))printInfo('小名',1.75,80,"唱歌")#实际参数:占用内存地址printInfo('小美',1.65,60,"唱歌")
b.参数分类
示例:
def sum(*arge):result=0for items in arge:#注意arge是参数,sum只是个函数名result+=itemspassprint('累加结果是%d'%result)sum(1,2,3,4,5)#参数为元组形式def keyfunc (**kwargs):print(kwargs)passdictA={"name":"小明","age":35}keyfunc(**dictA)#参数字典形式写法keyfunc(name="小美",age=26)#第二种写法def complexfunc(*arge,**arges):#可选参数必须放到关键字可选参数之前print(arge,arges)passcomplexfunc(1,2,3)complexfunc(name='小美')complexfunc(1,2,3,name='小美')

1.4函数嵌套

1.5实战示例
a.写函数,接收n个数字,求和
def Sum(*arge):result = 0for i in arge:result += ireturn resultprint(Sum(1, 2, 3, 4)))

b.写函数,接收一个列表数,并找出奇数位组成新的列表。
def listfun (a):#如何使用列表作为参数n=len(a)#获取列表长度m=a[0:n:2]return mprint(listfun([1,2,3,3,4,5,7]))
c.写函数,检查传入字典的每个value长度,大于2时,保留前两长度内容,并且将新的内容传到新的字典中。
示例:(len()实参只能是字符串,列表,元组)
def dictfun(**arge): # 如何使用列表作为参数#result={}for key, value in arge.items():if len(value) >= 2:result[key] = value[:2]else:result[key] = valuereturn resultprint(dictfun(name="小明", age=(2, 3, 4, 4)))

2.函数基础知识(下)
2.1全局变量和局部变量
示例:
pro='电子信息'name='小明'grade='100'def printInformation():name='xiaoming'global grade#让grade是全局变量grade='99'print('{}.{}.{}'.format(name,pro,grade))passprintInformation()

2.2函数参数的引用和传值
a.在python中,函数调用时,实参传递的就是对象的引用(地址)。
注意下面示例中,函数内部的处理是否会影响到函数外部的数据变化。
示例:
#内部不影响外部a=1#不可变类型int,str,元组def func(x):print('x的地址{}'.format(id(x)))x=2#不可变类型,数据修改后重新开辟空间print('x修改以后的地址{}'.format(id(x)))print(x)passprint('a的地址:{}'.format(id(a)))func(a)print(a)#内部影响外部li=[]#可变类型字典,列表def testRenc(parms):li.append([1,2,3,4,5])print(id(parms))print('内部的{}'.format(parms))passtestRenc(li)print(id(li))print('外部的{}'.format(li))

2.3匿名函数
a.形式(只有一行)
lambda 参数1,参数2,参数3:表达式b.定义
注:lambda是简单表达式,不是代码块,lambda设计是为了满足简单函数场景。
示例
#传统方法求和def fun(x,y):return x+yprint(fun(1,2))#匿名函数求两数中最大值n=lambda x,y:x if x>y else y #无函数名,代替传统双分支写法print(n (2,3))#匿名函数求和m=lambda x,y:x+y #无函数名print(m (2,3))#匿名函数求和k=(lambda x,y:x+y)(3,4) #无函数名,直接调用,在该行完成赋值print(k)

2.4递归函数
注:容易栈溢出,内存紧张甚至泄露
def digui(n):if n==1:return 1else:return n*digui(n-1)#此处调用自己passprint('7的阶乘{}'.format(digui(7)))

b.递归查找路径里所有文件
import os #引入文件操作模块def findFile(file_Path):listRs=os.listdir(file_Path)#得到该路径下所有文件夹for fileItem in listRs:full_path=os.path.join(file_Path,fileItem)#获取完整的文件路径if os.path.isdir(full_path):#判断是否是文件夹findFile(full_path)#如果是一个文件夹再去递归else:print(fileItem)passpasselse:return

3. 内置函数
https://docs.python.org/3/library/functions.html
3.2数学运算内置函数
abs()绝对值
roud()四舍五入取相似值
pow()求幂运算
divmod()求余和商
max()求最大值
min()求最小值
sum()求和
eval()将字符出计算
示例:
print(abs(-3))print(round(3.499,1)) #3.499保留一位小数print(pow(3,3))print(3**3)print(divmod(7,2))print(max([1,2,3,4,5])) #返回给定参数最大值,参数可以是序列print(max(1,2,3,4,5 ))print(sum(range(10)))print(sum(range(10),3)) #最后结果+3a,b,c=1,2,3print('动态执行的函数={}'.format(eval('a*b+c-30')))print(eval('a+b+c',{'c':3,'a':1,'b':3}))def TestFun():print('执行函数')passeval('TestFun()')

int()整型
float()浮点型
str()字符串类型
ord()字符转数字
chr()数字转字符;将数字(ascii码)转化为对应字符
bool()转换ture和flase
bin()十进制转为二进制hex()十进制转十六进制
oct()转八进制
list()元组转列表
tuple()元组
dict()字典
bytes()转为字节数组
示例:
tup=(1,2,3,4,5) #元组不能修改print(type(tup))li=list(tup)#元组转序列print(type(li))li.append('强制转换成功')#列表可以修改print(li)tuplist=tuple(li)#序列转元组print(type(tuplist))#字典操作dict()dic=dict()print(type(dic))dic['name']='小明'dic['age']=18print(dic)print(bytes('我喜欢python',encoding='utf-8'))#将数据转化国际标准字节

all()判断给定的可迭代参数(元组,列表)全都是ture(除了0,空,false都算ture)返回ture,否则返回false。注意空元组,空列表算特殊的ture。
any()只要有一项是ture返回ture,否则返回false。
sort()排序
reverse()反向列表排序
range()创建整数列表,用于for循环中
print(all(([])))#True,列表print(all(('')))#True,元组print(all([1,2,3,'']))print(any(('',1)))li=[1,6,7,8,3,4,0]#sort排序li.sort()#直接修改原始对象,所以元组不能用因为不能修改print(li)li=[1,6,7,8,3,4,0]#sort排序sorted(li)#并非在原始对象上修改,所以需要修改后赋值print(li)varlist=sorted(li)print('{}'.format(varlist))varlist=sorted(li,reverse=True)#降序print(varlist)tupArray=(33,4,5,1,)#元组类型只能用sortedvartup=sorted(tupArray,reverse=False)print(vartup)

zip():用来打包,按照索引把对应元素对象,压缩成一个个元组块放进列表中。
def printBookInfor():books = []id = input('输入编号,每项空格分隔') # strbookname = input('输入书名,空格分隔')bookpos = input('输入位置:空格分隔')idlist = id.split(' ')namelist = bookname.split(' ')poslist = bookpos.split(' ')bookinfor = zip(idlist, namelist, poslist)for bookitem in bookinfor: # 遍历图书信息存储,得到一个个列表元素即元组dictInfo = {'编号': bookitem[0], '书名': bookitem[1], '位置': bookitem[2]}# bookitem[0]每个元组的第0个元素books.append(dictInfo)passprint(books)for item in books:print(item)printBookInfor()

enumerate()将可遍历对象如列表,元组,字符串,字典组合成一个索引序列,
enumerate(可遍历对象,start=索引起始)枚举
listobj=['a','b','c']print(enumerate(listobj))print(list(enumerate(listobj)))for index,item in enumerate(listobj):print(index,item)dicobj={}dicobj['name']='小明'dicobj['hobby']='rap'print(dicobj)for item in enumerate(dicobj,start=4):print(item)

a.集 合概念
集 合set,属于数据类型一种,是无序且不重复的元素集 合,通常用来去重复。不支持索引切片。类似字典只有key没有value
add()添加
clear()清除[字典列表均可以]
difference()差集:-
intersection()并集:&
union()交集:|
pop()移除
discard()移除某一元素
update()更新数据
b.创建方式
#第一种et1={"1","2"}#第二种方式list1=['1','2']set2=set(list1)
注:第一种方式中,字典也是{}但是集 合只需要键不需要值。
示例:
dic1={}dic2={1:2}set1={1}#类似于字典但是只有键没有值set2={1,2,3,4}print(type(dic1))print(type(dic2))print(type(set1))set1.add('python')#set1被添加在自己身上print(set1)rs=set1.difference(set2)#差集:set1有set2没有print(rs)print(set1-set2)#等同于差集quData=set2.pop()#拿出数据print(quData)print(set2)set2.discard(4)#删除指定项print(set2)set1.update(set2)#更新类似于并集,两个变量都是集 合,元素不行print(set1)

4. 实战演练
a.求任意n到m的数字和
b.鸡兔同笼,35个头,94只脚,求鸡兔各多少只
c.给定列表,找出其中唯一一个出现一次的元素
#求1-10的和def sumab (m,n):jieguo=sum(range(m,n+1))return jieguoprint(sumab(1,10))#鸡兔同笼问题def count():for i in range(1,36):if i*4+(35-i)*2==94:return (i,35-i)jieguo=count()print('兔有{},鸡有{}'.format(jieguo[0],jieguo[1]))#求给定列表中唯一一个出现一次的元素li=[1,2,3,3,2,]set1=set(li)for i in set1:li.remove(i)set2=set(li)print(set1-set2)

编辑:赵栓栓
校核:李正平、张泽明、张勇、王畅、陈凯歌、董浩杰