1059|11

58

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

【好书共读——《Python编程快速上手(第2版)》】——003Python函数基础知识 [复制链接]

 

邀请:@maychang   @chunyang   @okhxyyo   参与回复

Python函数基础知识介绍

1.函数关键词有哪些?

Python 中函数具有五大关键词:“定义”、“调用”、“传递”、“参数”、“变元”。
一般,函数定义采用def关键词。函数定义和调用如下图所示。首先def定义sayHello(name)函数,其中name为为“变元”。然后,通过sayHello(‘A1’)调用函数,A1为参数,将A1赋值给name的过程称为“传递”
在函数调用过程中,一般有数据返回时,采用return,如果无数据返回,则返回则为None

2.局部和全局作用域

在Python中,被调用的函数内具有变元和变量,处于该函数的“局部作用域”中,这些变量被称为“局部变量”。在所有函数之外赋值的变量,处于“全局作用域”中,而这些变量被称为“全局变量”。“作用域”相当于变量的容器,当作用域被销毁时,变量值将会被丢弃。局部变量随函数调用结束被丢弃,而全局变量则需要到程序结束才会被丢弃。
作用域四大关键点
①全局作用域中的代码不能使用任何局部变量;
②局部作用域中的代码可以访问全局变量;
③一个函数的局部作用域中的代码,不能使用其他局部作用域中的变量;
④在不同的作用域中,可以使用相同名字命名的不同变量。即可以有一个名为spam的局部变量和一个名为spam的全局变量。

3.函数答疑

① Python中如何在函数内修改全局变量
RE:在python中,如果需要修改全局变量,则要使用global语句,在变量定义前面添加global词。global使用如下图所示。

② Python中如何区分一个变量处于局部作用域还是全局作用域

RE:通常,区分变量处于局部作用域还是全局作用域有4条法则:
a.如果变量在全局作用域中使用(即在函数之外),他就是全局变量;
b.如果在一个函数内,有针对该变量的global语句,他就是全局变量;
c.如果该变量用于函数中的赋值语句,他就是局部变量。
d.如果该变量没有用在函数的赋值语句中,他就是全局变量。

最新回复

请试一试这段代码,后面打印出来的结果是spam()改变了列表的值   详情 回复 发表于 2024-5-22 12:39
点赞 关注
个人签名

新年新气象!

 
 

回复
举报

6969

帖子

11

TA的资源

版主

沙发
 

① Python中如何在函数内修改全局变量

这个在原来我的学习中,有点难学的。

点评

可以,一起学习  详情 回复 发表于 2024-5-11 10:34
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

但愿能学有所成,谢谢楼主。

 
 
 

回复

58

帖子

0

TA的资源

一粒金砂(高级)

4
 
lugl4313820 发表于 2024-5-11 06:24 ① Python中如何在函数内修改全局变量? 这个在原来我的学习中,有点难学的。

可以,一起学习


 
 
 

回复

1375

帖子

1

TA的资源

五彩晶圆(初级)

5
 

嗯嗯嗯,蛮有道理的。。。。。

提个问题:

若定义了一个列表a,然后调用spam(a)函数,在spam函数体内处理过这个a,函数调用结束后,a会是什么状况?

点评

调用spam(a)函数,只是将a列表传给spam()函数使用,如果在spam()函数中未申明a为全局变量,那么默认a为局部变量,并不影响全局变量a的值。  详情 回复 发表于 2024-5-18 17:08
 
 
 

回复

1375

帖子

1

TA的资源

五彩晶圆(初级)

6
 

情况再变化一下:

spam() 不带参数,但在函数里也处理了函数体外的列表a,那这个a就是全局性的,对伐?

它不会报错,并可以直接修改它。

这个逻辑应该是没有问题的。

 

它貌似不像c中多文件下的extern,加global后,是不是可以等同?写个示例验证验证

点评

要在spam() 函数内处理全局变量a,必须要加global,否则Python默认a是局部变量。  详情 回复 发表于 2024-5-18 17:02
 
 
 

回复

58

帖子

0

TA的资源

一粒金砂(高级)

7
 
hellokitty_bean 发表于 2024-5-11 21:28 情况再变化一下: spam() 不带参数,但在函数里也处理了函数体外的列表a,那这个a就是全局性的,对伐? ...

要在spam() 函数内处理全局变量a,必须要加global,否则Python默认a是局部变量。

个人签名

新年新气象!

 
 
 

回复

58

帖子

0

TA的资源

一粒金砂(高级)

8
 
hellokitty_bean 发表于 2024-5-11 21:16 嗯嗯嗯,蛮有道理的。。。。。 提个问题: 若定义了一个列表a,然后调用spam(a)函数,在spam函数体内 ...

调用spam(a)函数,只是将a列表传给spam()函数使用,如果在spam()函数中未申明a为全局变量,那么默认a为局部变量,并不影响全局变量a的值。

点评

哦哦哦,感谢楼主辨析。。。。 试看下面例子: a=[1,2,3,4,5] def spam(a):     for i in range(len(a)):         a+=1 print("original a:",a)  详情 回复 发表于 2024-5-19 13:35
个人签名

新年新气象!

 
 
 

回复

1375

帖子

1

TA的资源

五彩晶圆(初级)

9
 
zyb329321151 发表于 2024-5-18 17:08 调用spam(a)函数,只是将a列表传给spam()函数使用,如果在spam()函数中未申明a为全局变量,那么默认a为局 ...

哦哦哦,感谢楼主辨析。。。。

试看下面例子:

a=[1,2,3,4,5]

def spam(a):
    for i in range(len(a)):
        a+=1


print("original a:",a)
spam(a)
print("spam(a) be called: ",a)

 

这里的列表a是不是传递的引用给spam的?其生命周期是不是一直存在?

 
 
 

回复

1375

帖子

1

TA的资源

五彩晶圆(初级)

10
 

又试了一下:

a=[1,2,3,4,5]

def spam():
    for i in range(len(a)):
        a[i]+=1


print("original a:",a)
spam()
print("after call spam() : ",a)

 

竟然结果一样。

这啥状况呀?

点评

因为spam()函数不能改变列表a的值。a是全局变量,不能在函数里面改变。  详情 回复 发表于 2024-5-21 20:47
 
 
 

回复

58

帖子

0

TA的资源

一粒金砂(高级)

11
 
hellokitty_bean 发表于 2024-5-19 13:39 又试了一下: a=[1,2,3,4,5] def spam():     for i in range(len(a)):  &nbs ...

因为spam()函数不能改变列表a的值。a是全局变量,不能在函数里面改变。

点评

请试一试这段代码,后面打印出来的结果是spam()改变了列表的值  详情 回复 发表于 2024-5-22 12:39
个人签名

新年新气象!

 
 
 

回复

1375

帖子

1

TA的资源

五彩晶圆(初级)

12
 
zyb329321151 发表于 2024-5-21 20:47 因为spam()函数不能改变列表a的值。a是全局变量,不能在函数里面改变。

请试一试这段代码,后面打印出来的结果是spam()改变了列表的值

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表