一、什么是函数

函数是组织好的、可重复使用的、用来实现单一或相关联功能的代码段,它能够提高应用的模块化和代码的重复利用率。

#演示函数的定义与使用
def prt():
print("*")
print("***")
print("*****")
return 1

prt() #函数的调用

#调用同文件的函数,只需要在函数下方写函数名,传对应参数,即可调用

#调用不同文件的函数,需要先导入:from 文件路径函数名/*

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)
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):

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 传参方式必须是的形式

 

#函数传参的类型的问题

#一般可变长度的参数写在不可变参数前面

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)):
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中pred函数的用法 python predict函数用法_python中pred函数的用法

举例:

#函数的嵌套调用(在函数中调用其他函数)

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):
"大王"
print("t的name",name)
"小王")
print("test的name",name)
test("xiaowang")
print(name)

 

八、递归函数和匿名函数

  • 递归函数

一个函数的内部可以调用其他函数。但是,如果一个函数在内部不调用其它的函数,而是自己本身的话,这个函数就是递归函数。

python中pred函数的用法 python predict函数用法_python中pred函数的用法_02

举例:

#演示递归函数(一个函数调用自己)

b=0
def a(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
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)


希望和悲伤,都是一缕光。总有一天,我们会再相遇。