首页 > 编程语言 >python基础:函数和参数

python基础:函数和参数

时间:2023-09-29 13:11:07浏览次数:35  
标签:定义 fa python 作用域 参数 变量 函数

一 函数

1 函数的文档字符串

函数内的第一条语句是字符串时,该字符串就是文档字符串,用于对函数进行说明

利用文档字符串可以自动生成在线文档或打印版文档,建议在工作中习惯加入文档字符串,否则时间一长,自己可能都不知道函数是干嘛,更不用说其他人了
image

如上,利用__doc__属性,可以输出函数的文档字符串

在help()函数输出的相关信息中,也可输出文档字符串

print(help(sum_num))

执行结果
image

2 函数返回值

函数中有定义return 就是retun 后面计算出来的值
若函数中未定义return,函数返回值就是None,相当于定义了 return None

所以,每一个函数都对应一个return,函数执行完return就执行结束了

3 函数对象

定义了一个函数,实际上是定义了一个对象即函数对象,然后把函数名和这个对象关联在一起,用这个函数名指代函数对象
也可用其他变量名来指代函数对象并执行函数,如下
image

二、 函数参数

1 函数中的位置参数与关键字参数

image
如上,x为位置参数,y为关键字参数,y也是默认值参数,执行函数未传y的值,y的值就是默认值

函数定义时,关键字参数必须在位置参数后面,如下面的写法是错误的

def sum_num(x, y = 1, z):
	xxxxx

如上, 关键字参数y=1必须放在最后面才行

收集函数参数

定义函数时,利用*xxx 与 **xxx的形式可以收集执行函数时传进来的多个参数如下
image

如上,告诉我没有传z的值

换一种执行方法如下
image

也可以把*xx放在最后
image

如上,我们可以看到执行函数时,通过xxx传递进来的参数放在一个数组里面
函数定义时,
xxx的形式不能收集关键字参数如下
image

要在执行函数时收集关键字参数,可在函数定义时使用**xxx的形式,如下
image

如上,**xxx的形式可收集执行函数时传递进来的多个关键字参数,收集到的关键字参数放在一个字典里面

注意,函数定义时,与位置参数和关键字参数的关系一样,**xxx必须放在*xxx的后面

分配参数

在执行函数时使用*xxx或者**xxx的形式
image
image

image

使用如上,不过在执行函数时使用**xxx来分配字典参数显得很多余,我们可以直接传递字段进去,通过字典的属性来取值

三 函数作用域

除全局,作用域外,每一个函数的执行都有一个该函数的内部作用域

在函数内给变量赋值时,该变量为函数内部作用域内的变量,变量值得变动的影响范围也仅仅在该内部范围,函数外是的地方是看不见该变量或该变量的变动的

函数内读取变量时,按照函数内部作用域--函数外部作用域--全局作用域--python内置变量名来查找变量
所以,内部作用域与外部作用域有同名变量时:
处于内部,读取的就是内部作用域中 变量的值
处于外部,读取的就是外部作用域变量的值


image

上面在函数外部访问变量a, 和函数内的定义没关系,只能在外部作用域找,但外部并未定义a


image

上面,函数fa()内部读取a,首先会找函数内部作用域找,找不到才会其他作用域找,所以输出的是内部作用域定义的1
函数外部读取a,同样的道理,他会从自己所处的作用域找,自己作用域中定义的值是10,同时自己的作用域对函数fa而言, 是函数的外部作用域,虽然函数内也定义了a的值,但不会对外部作用域产生影响。所以a的值就是10


image

上面,函数fa()内部读取a,首先会找函数内部作用域找,找不到才会去其他作用域找,函数内部作用域并未定义a的值,读取的是外部a的值10

如果处于内部作用域,想给外部作用域的变量赋值,就要用global或者nonlocal
给外部全局作用域的变量赋值是用gloabl
给外部更上层函数中的变量赋值用nonlocal


image
在函数内部声明 gloabl a ,就是说a是外部全局作用域中的a,解析来在函数内部说的a都是全局作用域中的a,所以再把全局作用域a的值改为20后,读取的全局a的是就是20

在外部作用域读取a的值,由于函数fa先执行,函数改变外部作用域中a的值,所以输出的值是20
如果在外部中,在fa()运行前读取a就是10


image

如上,函数fa里面定义了函数fb, 函数fa返回一个函数对象即fb,每个函数都有自己的作用域
首先执行的是fa(),执行fa()时,只是返回函数对象fb,里面的函数fb并未执行,如果写成fa()()那就不光执行了fa,里面函数fb也执行了
现在只是执行fa,所以在fa的作用域中查找a b的值,刚好在该作用域中定义了a b的值,所以,结果就是定义的值

f = fa() fa的返回值是函数fb所指向的函数对象,所以f也执向了这个函数对象,执行f()也就是执行了函数fb()
在fb作用域中,声明nonloacal a,说明在fb中,所说的a就是外面更上层函数fa中的a,它把fa中的值变更为30,输出的值自然就是30

最后在全局作用域中读取a,当然首先会在全局作用域中查找a,该作用域相对于两个函数来说是外部作用域,加上又没有声明global,所以函数内如何折腾,都不会对外部的全局作用域产生影响,最终a的值就是全局作用域中的a


image

这是自己以前常犯的错误,在以前看来
a=a+1,首先会读取a的值,因为函数内部未定义a,所以读取a的值就是外部作用域中的10,所以结果是11
但就像前面开始所说的,在函数内部给变量a赋值,变量a就会被当作函数内部作用域的变量,但在赋值之前,函数内部作用域中并没有定义a
所以,要么在赋值前,在函数内部定义或传入一个a,要么通过global的方式把a做为全部变量都进来,然后给作为全局变量的a赋值

标签:定义,fa,python,作用域,参数,变量,函数
From: https://www.cnblogs.com/MyRecords/p/17736794.html

相关文章

  • Python笔记:基本数据结构(容器)的优化
    列表的性能问题队列的弹出问题利用Python的原生语法很难写出一个真正完全能达到\(O(1)\)的队列,究其原因是由于insert方法的时间复杂度问题:classqueue: def__init__(self,q): self.q=[] defpopright(self): self.q.pop() defappendleft(self,elem): self.q.ins......
  • python_day1
    Python0基础操作0.0快捷键ctrl+d复制当前行代码shift+alt+上\下将当前行代码上移或下移ctrl+f搜索0.1字面量0.1.0注释#开头(单行注释)(一般用于对单行代码进行注释)'''多行注释(一般用于对程序文件进行解释)'''0.1.1变量变量值可以记录数据,重复使用0.1.......
  • Numba 库中的一个装饰器函数numba.jit
    numba.jit 是Numba库中的一个装饰器函数,用于实现即时编译(Just-In-TimeCompilation)的功能。它可以将Python函数转换为高性能的机器码,从而提供更快的执行速度。使用 numba.jit 装饰器可以将普通的Python函数转换为被Numba优化的函数。当使用 numba.jit 装饰器修饰一......
  • Python之列表
    目标列表的应用场景列表的格式列表的常用操作列表的循环遍历列表的嵌套使用一.列表的应用场景思考:有一个人的姓名(TOM)怎么书写存储程序?答:变量。思考:如果一个班级100位学生,每个人的姓名都要存储,应该如何书写程序?声明100个变量吗?答:列表即可,列表一次性可以存储多个数据。二.列表的......
  • python进度条的实现(time)
    最近有小伙伴留言说想使用python实现进度条的功能,其实python中使用sleep每秒钟输出一部分就很容易的实现了这一类功能。案例一:importtimeforiinrange(20):print("□",end="")time.sleep(1)运行结果:案例二:(实现.........)importtimeforiinrange(20):p......
  • Python数据类型
    基本数据类型Python中有一些常用的基本数据类型,让我们一起来看看各种类型及其用途。整数(int)整数是Python中最基本的数据类型之一,用于表示没有小数部分的整数值。age=25浮点数(float)浮点数用于表示带有小数部分的数值。pi=3.14字符串(str)字符串是一系列字符的序列,可以用来表示文本......
  • 处理不平衡数据的十大Python库
    数据不平衡是机器学习中一个常见的挑战,其中一个类的数量明显超过其他类,这可能导致有偏见的模型和较差的泛化。有各种Python库来帮助有效地处理不平衡数据。在本文中,我们将介绍用于处理机器学习中不平衡数据的十大Python库,并为每个库提供代码片段和解释。 https://avoid.overfi......
  • QRes v1.1是由Anders Kjersem开发的一个工具,用于在Windows上更改分辨率。它提供了一些
    QResv1.1是由AndersKjersem开发的一个工具,用于在Windows上更改分辨率。它提供了一些命令行选项来控制分辨率、颜色深度和刷新率等参数。协助用户更改桌面分辨率,颜色深度和刷新率。具有命令行工具,无需启动GUI界面即可更改所有这些设置。显示使用情况信息并自动将配置保存在注册......
  • python: Drawing Canvas
     #encoding:utf-8#版权所有2023涂聚文有限公司#许可信息查看:#描述:#Author:geovindu,GeovinDu涂聚文.#IDE:PyCharm2023.1python311#Datetime:2023/9/2121:28#User:geovindu#Product:PyCharm#Project:EssentialAlgor......
  • python基础:python命令行选项
    一前言安装完python后,通过python关键字我们就可以执行python文件如下pythonxxx.py上面是很常见的在命令行执行py的方式,但其实python关键字后面还可以加上许多可选选项如python-cxxxxxpython-mxxxxx二python关键字后的可选选项python[-bBdEhiIOqsSuvVWx?][-ccom......