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)

 

六、函数的嵌套调用


2387990-20220119235433451-1542276224.png


举例:

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

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)

 

八、递归函数和匿名函数


  • 递归函数

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


2387990-20220119235450711-1059093025.png


举例:

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

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)


相关文章
|
29天前
|
Python
【python从入门到精通】-- 第五战:函数大总结
【python从入门到精通】-- 第五战:函数大总结
62 0
|
26天前
|
Python
Python之函数详解
【10月更文挑战第12天】
Python之函数详解
|
27天前
|
存储 数据安全/隐私保护 索引
|
17天前
|
测试技术 数据安全/隐私保护 Python
探索Python中的装饰器:简化和增强你的函数
【10月更文挑战第24天】在Python编程的海洋中,装饰器是那把可以令你的代码更简洁、更强大的魔法棒。它们不仅能够扩展函数的功能,还能保持代码的整洁性。本文将带你深入了解装饰器的概念、实现方式以及如何通过它们来提升你的代码质量。让我们一起揭开装饰器的神秘面纱,学习如何用它们来打造更加优雅和高效的代码。
|
19天前
|
弹性计算 安全 数据处理
Python高手秘籍:列表推导式与Lambda函数的高效应用
列表推导式和Lambda函数是Python中强大的工具。列表推导式允许在一行代码中生成新列表,而Lambda函数则是用于简单操作的匿名函数。通过示例展示了如何使用这些工具进行数据处理和功能实现,包括生成偶数平方、展平二维列表、按长度排序单词等。这些工具在Python编程中具有高度的灵活性和实用性。
|
21天前
|
Python
python的时间操作time-函数介绍
【10月更文挑战第19天】 python模块time的函数使用介绍和使用。
26 4
|
23天前
|
存储 Python
[oeasy]python038_ range函数_大小写字母的起止范围_start_stop
本文介绍了Python中`range`函数的使用方法及其在生成大小写字母序号范围时的应用。通过示例展示了如何利用`range`和`for`循环输出指定范围内的数字,重点讲解了小写和大写字母对应的ASCII码值范围,并解释了`range`函数的参数(start, stop)以及为何不包括stop值的原因。最后,文章留下了关于为何`range`不包含stop值的问题,留待下一次讨论。
17 1
|
28天前
|
索引 Python
Python中的其他内置函数有哪些
【10月更文挑战第12天】Python中的其他内置函数有哪些
15 1
|
1月前
|
数据处理 Python
深入探索:Python中的并发编程新纪元——协程与异步函数解析
深入探索:Python中的并发编程新纪元——协程与异步函数解析
26 3
|
1月前
|
机器学习/深度学习 算法 C语言
【Python】Math--数学函数(详细附解析~)
【Python】Math--数学函数(详细附解析~)