IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 动手学python系列之Python函数 -> 正文阅读

[Python知识库]动手学python系列之Python函数

上一篇文章我们简单地介绍了python的流程控制,包括循环结构和分支结构,接下来,我们将继续学习Python函数。

我们都知道正方形的面积公式为:

s=a*a

那么,在计算不同正方形的面积时,会出现:

S1=1*1

S2=2*2

S3=3*3

......

由此,可以看出,在计算不同正方形的面积时,只需要输入不同的边长,就可以计算该正方形的面积,当有很多正方形需要计算面积时,每一个都需要执行S=a*a,是不是有更简单的方法来计算不同正方形的面积呢?

在python中,可以用函数来实现这一过程。函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。相同的代码段可以封装在函数中,需要执行相同的逻辑时,只需要调用函数即可。

??函数定义

在python中,如何去定义函数呢?通常函数的定义有以下规则。

命名规则

1、函数代码块以?def?关键词开头,后接函数标识符名称和圆括号?()

2、任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。

3、函数的第一行语句可以选择性地使用文档字符串,用于存放函数说明。

4、函数内容以冒号?:?起始,并且缩进。

5、return [表达式]?结束函数,选择性地返回一个值给调用方,不带表达式的 return 相当于返回 None。

python中用关键字 def 定义函数,其语法格式为:

def 函数名(参数列表):
    函数体

函数名:即标识符,函数名最好能够体现出该函数的功能

参数列表:设置该函数可以接收多少个参数,多个参数之间用逗号( , )分隔。

[return [返回值] ]:用于设置该函数的返回值。一个函数,可以有返回值,也可以没有返回值,是否需要根据实际情况而定。

比如说我们定义一个函数判断两个数的大小,

def max(a,b):    
  if a>b:      
    return a    
  else:        
    return bgetMax=max(3,4)
  print ( getMax )

在上述代码中,函数max的结构为:

图片

比较3,4 的大小,运行结果为:

图片

函数参数

?函数中的参数包括形式参数和实际参数两种,函数参数的作用是传递数据给函数,令其对接收的数据做具体的操作处理。

1. 什么是形参

对于函数来说,形式参数简称形参,是指在定义函数时,定义的一个变量名。形参的作用:是用来接收调用函数时输入的值。

下面的代码中,x、y、z 就是形参。


#定义函数
def foo(x, y, z):
      print("x=", x)
      print("y=", y)
      print("z=", z)

2. 什么是实参

对于函数来说,实际参数简称实参,是指在调用函数时传入的实际的数据。函数调用时,实参传递给形参,函数调用结束时,实参将不再存在于程序中。


#调用函数
foo(1,4,7)                #此处的1,4,7是实参

上面我们明白了形参和实参后,在调用函数时,实参是怎么样将值传递给形参的呢 ?

在python中,根据实际参数的类型不同,函数参数的传递方式可分为 2 种,分别为值传递和引用(地址)传递:

值传递:适用于实参类型为不可变类型(字符串、数字、元组);

引用(地址)传递:适用于实参类型为可变类型(列表,字典);

值传递和引用传递之间的不同在于,函数进行值传递后,如果形参的值发生了变化,不影响实参的值;函数在引用传递之后,形参和实参的值都会发生变化。如下代码所示:


# 定义函数
def demo(obj) :
    obj += obj
    print("形参值为:",obj)

# 比较值传递时实参和形参的变化
print("-------值传递-----")
a = "我是一个字符串"
print("a的值为:",a)
demo(a)
print("实参值为:",a)

# 比较引用传递时形参和实参的变化
print("-----引用传递-----")
a = [1,2,3]
print("a的值为:",a)
demo(a)
print("实参值为:",a)

上述代码中,在值传递和引用传递时,形参和实参发生相应的变化,如代码运行结果所示:

? ?

图片

从运行结果不难看出,在执行值传递时,改变形式参数的值,实际参数并不会发生改变;而在进行引用传递时,改变形式参数的值,实际参数也会发生同样的改变。

在调用函数时,会根据不同的参数类型使用不同的参数类型,常见的参数类型有:位置参数,关键字参数,默认参数,可变参数,

  • 位置参数??调用函数时传入实际参数的数量和位置都必须和定义函数时保持一致。即形参和实参类型和数量完全一致。

  • 关键字参数??指调用函数时,将形参名当做键名,将实参当做键值,以键名=键值的语法形式来进行调用。?用形式参数的名字来确定输入的参数值。形参和实参不要求完全一致。

  • 默认参数??定义函数时,形参自定义默认参数,调用函数时,如果没有传递参数,则会使用默认参数。默认参数顺序必须从右向左。

  • 可变参数??参数较多时,加入 * 实参以元组形式导入,加 ** 实参以字典形式导入

#位置参数的使用
"""
必需参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样。
调用函数时,传入实际参数的位置类型,数目必须和形式参数位置一一对应,

"""
def area(upper_base,lower_bottom,height):
    return (upper_base+lower_bottom)*height/2
print("正确结果为:",area(4,3,5))
print("错误结果为:",area(4,5,3))


# 关键字参数的使用
"""
关键字参数是指使用形式参数的名字来确定输入的参数值。通过此方式指定函数实参时,
不再需要与形参的位置完全一致,只要将参数名写正确即可。

"""
def printinfo ( name , age ) :
    "打印任何传入的字符串"
    print ( "名字: " , name )
    print ( "年龄: " , age )
    return

# 调用printinfo函数
printinfo ( age = 50 , name = "LYP" )


#默认参数

"""
为参数设置默认值以后,如果不传递对应的实参,那么会使用默认值进行代替。
"""

# 定义一个简单的函数,参数之后
def just_return ( x , y = 2 , z = 3 ) :
    """ 参数y的默认值为2, 参数z的默认值为3 """
    return x + y + z
# 下面的函数调用是合法的,没有传递对应的位置实参时,将使用参数的默认值
result  = just_return ( 1)
print ( result )
# 下面的函数调用是合法的,没有传递对应的位置实参时,将使用参数的默认值
result = just_return (1,3)
print ( result )

#可变参数表示
"""
函数的可变参数,“可变”是指参数的数目是变化的,不确定的。
在Python中定义函数时,给形参加上一个"*"或"**"的修饰符,那么该形参就是一个可变形参。
用*将实参收集为元组
使用**将实参收集为字典
可变形参的收集顺序为,从可变形参的位置处开始,从左往右进行收集
"""

# 定义accumulate函数来实现累加
def accumulate ( number,*trouble,** dic) :
    print ( number )
    print ( trouble )
    print ( dic )
    return
#在下面参数中,234收集到number中,2,34,5,66,7,9900,89收集到元组中,
#a=2,b=4,f=4收集到字典中。
accumulate(234,2,34,5,66,7,9900,89,a=2,b=4,f=4)

运行结果为:

图片

匿名函数

在python中,我们用lambda来创建匿名函数,所谓匿名函数,就是不用def来创建函数,匿名函数的语法规则如下。

匿名函数命名规则

1、lambda 函数体比 def 简单很多。

2、lambda的主体是一个表达式,在lambda表达式中封装有限的逻辑进去。

3、lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。

用匿名函数实现加减乘除,结果如下,


#匿名函
sum =lambda x,y:x+y
sub =lambda x,y:x-y
mul =lambda x,y:x*y
div =lambda x,y:x/y
mod =lambda x,y:x%y
print("输入两个数之和",sum(10,20))
print("输入两个数之差",sub(10,20))
print("输入两个数之积",mul(10,20)
)print("输入两个数之商",div(10,20))

运行结果如下。

图片

递归函数

python的函数可以调用其他函数,如果一个函数在内部调用自身函数,这样的函数称之为递归函数,递归函数的优点是定义简单,逻辑清晰。理论上,所有的递归函数都可以写成循环的方式,但循环的逻辑不如递归清晰。

如何用递归实现阶乘的计算呢?


def fact(n):
    if n==1:
        return 1
    return n*fact(n-1)

print("5的阶乘为:",fact(5))
print("10的阶乘为:",fact(10))
print("6的阶乘为:",fact(6))

用递归分别计算5,10,6的阶乘,运行结果如下。

图片

?


关注公众号 Python大视界,一起学习动手学python,共同进步,一起成长啦。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

?

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-10-12 23:23:18  更:2021-10-12 23:23:49 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/28 21:17:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计