首页/文章/ 详情

Python入门实战 | 第4期(函数)

10月前浏览7569

本期继续给大家分享Python的语法讲解,Python作为深度学习的必备工具,也是PHM初学者的必备技能。之前分享了:

Python入门实战 | Python及PyCharm安装教程

Python入门实战 | 第2期(input输入语句和if判断语句
Python入门实战 | 第3期(循环语句和高级数据类型)

这期主要是介绍Python的函数,也是Python入门学习最后一期,本专题后面推出进阶学习,主要分享matplotlib和pandas这两个入门包。

目录

一、函数

1. 函数基础知识(上)

1.1函数定义

1.2函数形式及调用

1.3函数参数

1.4函数嵌套

1.5实战示例

2. 函数基础知识(下)

2.1全局变量和局部变量

2.2函数参数的引用和传值

2.3匿名函数

2.4递归函数

3. 内置函数

3.1内置函数查询

3.2数学运算内置函数

3.3数据类型转换内置函数

3.4序列操作

3.5内置集 合函数

4. 实战演练

一、函数

1. 函数基础知识(上)

1.1函数定义

一系列Python语句的组合,可以在程序中产生一次或多次(完成具体的独立功能)。通过函数实现代码复用最大化以及最小化冗余代码,使代码整体结构清晰,问题局部化。

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.参数分类
必选参数:定义函数时,形参不赋值,若实参空缺则不能运行。
默认参数:定义函数,形参赋值,若实参空缺仍能运行。
可选参数:参数个数不确定(*arge),元组类型。
关键字可变参数:参数是字典类型,字典键、key值是字符串(**arges)

示例:




















 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)      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函数嵌套

如下图所示,定义fun2函数时,fun1函数也参与运行,即在fun2函数中调用fun1,将fun1嵌套在fun2中。

1.5实战示例

a.写函数,接收n个数字,求和







def Sum(*arge):    result = 0    for i in arge:        result += i    return resultprint(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 resultprint(dictfun(name="小明", age=(2, 3, 4, 4)))

2.函数基础知识(下)

2.1全局变量和局部变量

局部变量:函数内部定义的变量,为保存临时数据。
全局变量:在 Python 代码主体中创建的变量是全局变量,属于全局作用域。全局变量在任何范围(全局和局部)中可用。
当全局变量和局部重复定义,优先使用内部变量。使用global把局部变量变成全局变量改变。

示例:











  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)      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.定义

匿名函数是没有名字的函数,其表达式只有一个,注意是表达式不是语句。(匿名函数自带return,return结果是表达式计算后结果)

注: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递归函数

递归可以将复杂任务分解成更简单的子问题,函数内部需要调用自己,不像嵌套那样调用其他函数,比嵌套容易,递归函数要有明确的结束条件。

注:容易栈溢出,内存紧张甚至泄露

示例:
a.求7的阶乘







def digui(n):    if n==1:     return 1    else:     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)              pass          pass      else:          return

3. 内置函数

编程语言的核心是操作内存中的数据,内存中的数据通过编程语言的API(系统提供的函数)来实现。系统预定义即安装python自带的函数称为内置函数(内嵌函数)。重点:序列操作,Set集 合。
3.1内置函数查询

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()')

3.3数据类型转换内置函数  

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'))#将数据转化国际标准字节

3.4序列操作

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('输入编号,每项空格分隔')  # 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)

3.5内置集 合函数

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)


编辑:赵栓栓

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



来源:故障诊断与python学习
航空电子pythonUM电机
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2024-01-17
最近编辑:10月前
故障诊断与python学习
硕士 签名征集中
获赞 72粉丝 70文章 145课程 0
点赞
收藏
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈