Python—函数

Python—函数

 

一、什么是函数

函数是组织好的、可重复使用的、用来实现单一或相关联功能的代码段,它能够提高应用的模块化和代码的重复利用率。 #演示函数的定义与使用 def prt(): print("*") print("***") print("*****") return 1 prt() #函数的调用 #调用同文件的函数,只需要在函数下方写函数名,传对应参数,即可调用 #调用不同文件的函数,需要先导入:from 文件路径 impo 函数名/* a=prt() print(prt())  

二、函数的定义和调用

定义函数 Python使用def关键字定义函数,语法格式如下: def 函数名(参数列表): " 函数_文档字符串" 函数体 return 表达式  

三、函数的参数

  • 函数参数的传递
如果希望定义的函数可以计算任意两个数的和,我们在定义函数的时候,让函数接收数据,这就是函数的参数。 def add (a, b): c = a + b print(c) a和b就是函数的参数,它们可以可以接收调用函数时传入的任意两个数。 举例: #带参函数 def add(a,b):#形式参数 print(a+b) add(11,13) #实际参数,必须只能带相同类型的字符(int,float,str)   def add(a,b): print(a+b) a+=1 b+=2   c=12 d=41 add(c,d) print(c,d) #只是传值,不会改变值  
  • 默认参数
定义函数时,可以给函数的参数指定默认值,这个被指定默认值的参数被称为默认参数。 #演示参数默认值 def add(a,b=3): print(a+b)   add(11,22)#默认值一般在值的范围情况少的时候用,在性别上 #有默认值的参数,可以不赋值,直接使用默认值 #如果对有默认值的参数赋值,该参数的值是新值 #没有默认值的参数不可以定义在有默认值参数之后  
  • 不定长参数
若希望函数被调用时能够传入比定义时更多的参数,可以在定义函数时使用不定长参数。 加星号(*)的参数args会以元组的形式存放未命名的参数; 加**的参数kwargs会以字典的形式存放命名的参数,即形如key=value的参数。 def 函数名([formal_args,] *args, **kwargs): "函数_文档字符串" 函数体、 return 表达式 举例: #演示不定长参数 def add(*a): sum=0 for x in a: sum+=x print(sum) add(1,2,3,4,5,6,7,8,9) #元组的形式   def add(**a): for x in a.items(): print(x) add(a=2,b=3) #**a 传参方式必须是 key=value的形式   #函数传参的类型的问题 #一般可变长度的参数写在不可变参数前面 def add(*a,b):#a,b都是元组 sum=0 for x in a: sum+=x for y in b: sum+=y print(sum) add(1,2,3,b=(4,5,6))   def add(a,b): for x in range(len(a)): a[x]+=10 a=[4,5,6] c=[1,2,3]#集合类型的地址,就是变量的值,只要地址不变,地址内的元素怎么改变都可以 add(c,b=(4,5,6)) print(c)  

四、函数的返回值

Python中使用return语句返回结果。 def add (a, b): c = a + b return c 函数add中包含return语句,这意味着add函数有返回值,其返回值是a和b相加的结果。  

五、函数的四种类型

根据函数的参数和返回值,函数可以分为四种类型: 无参数,无返回值的函数 无参数,有返回值的函数 有参数,无返回值的函数 有参数,有返回值的函数  
  • 无参数,无返回值的函数
def print_menu(): print('--------------------------') print(' xx涮涮锅 点菜系统') print(' 1. 羊肉涮涮锅') print(' 2. 牛肉涮涮锅') print(' 3. 猪肉涮涮锅') print('--------------------------') print_menu()  
  • 无参数,有返回值的函数
# 获取温度 def get_temperature(): #为了简单起见,先模拟返回一个数据 return 24 temperature = get_temperature() print('当前的温度为:',temperature) #当前温度为24  
  • 有参数,无返回值的函数
有参数、无返回值的函数使用较少,了解即可。 def test(num_one,num_two): result = num_one + num_two print('计算结果为:%d'%result)  
  • 有参数,有返回值的函数
def calculate (num): result = 0 i = 1 while i <= num: result = result + i i += 1 return result result = calculate (100) print('1~100的累积和为:', result) 像数据处理且需要处理结果场景可以使用此类函数。 举例: def nb(name,age): print("我叫"+name+",今年%i岁了"%age) return 1 def nba(name,age,gender): a=nb(name,age) if a==1: print("gender",gender) return 2 b=nba("ww",18,"female") print(b)  

六、函数的嵌套调用

Python—函数 举例: #函数的嵌套调用(在函数中调用其他函数) def nb(): print("nbsl") print("awsl") print("finish") def nba(): print("nba is start") nb() print("nba is close") nba()  

七、变量作用域

变量的作用域决定了在哪一部分程序可以访问哪个特定的变量名称。Python的作用域一共有4种。 L(Local):函数内的区域,包括局部变量和参数。 E(Enclosing):外面嵌套函数区域,常见的是闭包函数的外层函数。 G(Global):全局作用域。 B(Built-in):内建作用域。  
  • LEGB原则
Python中变量是按照L –> E –> G –>B 的顺序查找的。 Python在查找变量的时候会优先去函数内作用域中查找,若没有找到便会到嵌套函数作用域中查找,再找不到就去全局作用域中查找,最后再去内建作用域中查找。
  • 局部变量
所谓局部变量,就是在函数内部定义的变量。 局部变量的作用域是函数内部,说明它只在定义它的函数中有效,一旦函数结束就会消失。
  • 全局变量
定义在函数外的变量拥有全局作用域。 全局变量可以在整个程序范围内访问。 如果出现全局变量和局部变量名字相同的情况,则在函数中优先访问局部变量。
  • global和nonlocal关键字
使用nonlocal关键字可以在一个嵌套的函数中修改嵌套作用域中的变量。 >>> def func(): ... count = 1 ... def func_in(): ... nonlocal count ... count = 12 ... func_in() ... print(count) >>> func() 12   举例: #演示函数的作用域 name="dawang" def test(name): def t(name): name="大王" print("t的name",name) t("小王") print("test的name",name) test("xiaowang") print(name)  

八、递归函数和匿名函数

  • 递归函数
一个函数的内部可以调用其他函数。但是,如果一个函数在内部不调用其它的函数,而是自己本身的话,这个函数就是递归函数。 Python—函数 举例: #演示递归函数(一个函数调用自己) b=0 def a(b): b+=1 if b<=10: print("第%i次调用方法开始" % b) a(b) print("第%i次调用方法结束"%b) a(b)   #使用递归实现阶乘计算 n=int(input("请输入一个整数:")) result=1 def jiecheng(num,result): result*=num num-=1 if(num>=1): jiecheng(num,result) if num == 0: print(n, "的阶乘是:", result)   jiecheng(n,result)  
  • 匿名函数
匿名函数就是没有名称的函数,也就是不再使用def语句定义的函数。如果要定义匿名函数,则需要使用lambda关键字。匿名函数的定义格式如下所示: lambda [arg1 [,arg2,.....argn]]:expression [arg1 [,arg2,...argn]]”表示函数的参数,“expression”表示表达式。 匿名函数示例代码: sum = lambda a, b: a + b print(“运行结果:", sum( 10, 20 )) print("运行结果:", sum( 20, 20 )) 与普通函数相比,匿名函数有很多不同的地方: 普通函数在定义时有名称,而匿名函数没有名称。 普通函数的函数体中包含有多条语句,而匿名函数的函数体只能是一个表达式。 普通函数可以实现比较复杂的功能,而匿名函数可实现的功能比较简单。 举例: #lambda表达式来定义匿名函数 sum=lambda a,b:a+b c=sum(1,2) print(c)   transfrom=lambda *a:list(a) print(transfrom(1, 2, 3, 4, 5)) #以list打印出来  

九、日期时间函数

  • 时间函数
在Python中,通常有如下几种方式表示时间: (1)时间戳; (2)格式化的时间字符串; (3)时间元组(struct_time)。 时间戳表示从1970年1月1日00:00:00开始按秒计算的偏移量。 import time; # 引入time模块 ticks = time.time() print("当前时间戳为:", ticks) 举例: #演示时间戳 import time   t=time.time() print(t)  
  • 格式化的时间字符串
我们可以使用time模块的strftime方法来格式化日期。 import time # 格式化成2016-03-20 11:45:39形式 print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())) 举例: import time print(time.strftime("%Y-%m-%d %H:%M:%S"))  
  • 日历函数
calendar.calendar(year,w=2,l=1,c=6) 返回一个多行字符串格式的year年年历,3个月一行,间隔距离为c。每日宽度间隔为w个字符。每行长度为21* W+18+2* C。l是每星期行数。 calendar.monthrange(year,month) 返回两个整数,第一个整数是该月星期几的日期码,第二个整数是该月的日期码。日从0(星期一)到6(星期日);月从1到12。 import calendar rng=calendar.monthrange(2022,2) print(rng)  

十、随机数函数

random.randrang([start], stop[, step]) 返回指定递增基数集合中的一个随机数,基数默认值为1。其中,start参数用于指定范围的开始值,其包含在范围内;end参数用于指定范围的结束值,其不包含在范围内;step表示递增基数。 #演示随机数 import random a=random.randrange(2,20,5) print(a)
上一篇:python中的迭代器


下一篇:第5章作业