一、函数
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=0
for items in arge:#注意arge是参数,sum只是个函数名
result+=items
pass
print('累加结果是%d'%result)
sum(1,2,3,4,5)#参数为元组形式
def keyfunc (**kwargs):
print(kwargs)
pass
dictA={"name":"小明","age":35}
keyfunc(**dictA)#参数字典形式写法
keyfunc(name="小美",age=26)#第二种写法
def complexfunc(*arge,**arges):#可选参数必须放到关键字可选参数之前
print(arge,arges)
pass
complexfunc(1,2,3)
complexfunc(name='小美')
complexfunc(1,2,3,name='小美')
1.4函数嵌套
1.5实战示例
a.写函数,接收n个数字,求和
def Sum(*arge):
result = 0
for i in arge:
result += i
return result
print(Sum(1, 2, 3, 4)))
b.写函数,接收一个列表数,并找出奇数位组成新的列表。
def listfun (a):#如何使用列表作为参数
n=len(a)#获取列表长度
m=a[0:n:2]
return m
print(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] = value
return result
print(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))
pass
printInformation()
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)
pass
print('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))
pass
testRenc(li)
print(id(li))
print('外部的{}'.format(li))
2.3匿名函数
a.形式(只有一行)
lambda 参数1,参数2,参数3:表达式
b.定义
注:lambda是简单表达式,不是代码块,lambda设计是为了满足简单函数场景。
示例
#传统方法求和
def fun(x,y):
return x+y
print(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 1
else:
return n*digui(n-1)#此处调用自己
pass
print('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)
pass
pass
else:
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)) #最后结果+3
a,b,c=1,2,3
print('动态执行的函数={}'.format(eval('a*b+c-30')))
print(eval('a+b+c',{'c':3,'a':1,'b':3}))
def TestFun():
print('执行函数')
pass
eval('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']=18
print(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,)#元组类型只能用sorted
vartup=sorted(tupArray,reverse=False)
print(vartup)
zip():用来打包,按照索引把对应元素对象,压缩成一个个元组块放进列表中。
def printBookInfor():
books = []
id = input('输入编号,每项空格分隔') # str
bookname = 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)
pass
print(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 jieguo
print(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)
编辑:赵栓栓
校核:李正平、张泽明、张勇、王畅、陈凯歌、董浩杰