import argparse
import os
def test_fun3():
if pathA.endswith('/'):
pathA_name = os.path.basename(pathA[:-1])
else:
pathA_name = os.path.basename(pathA)
print("pathA_name: ", pathA_name )
if __name__ == "__main__":
parser = argparse.ArgumentParser(
'Options for test.')
parser.add_argument("--pathA", type=str, required=True,
help="the path of results")
args = parser.parse_args()
pathA = args.pathA
test_fun3()
在上述代码中,pathA 在__main__方法中定义,默认为全局(global)变量,在test_fun3()方法中,尝试使用新的局部变量存储pathA的切片,此时作为全局变量的pathA不变,因此程序可以正常运行。或者在test_fun2方法中第一次调用pathA之前声明“global pathA”后再使用,如下所示:
>>> if __name__ == "__main__":
... pathA = "aaa"
...
>>> def test():
... print(pathA)
... pathA = "xxx"
... print(pathA)
...
>>> test()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in test
UnboundLocalError: local variable 'pathA' referenced before assignment
>>> def test2():
... print(pathA)
... global pathA
... pathA = "xxx"
... print(pathA)
...
File "<stdin>", line 3
SyntaxError: name 'pathA' is used prior to global declaration
>>> def test3():
... global pathA
... print(pathA)
... pathA = "xxx"
... print(pathA)
...
>>> test3()
>>> pathA
'xxx'
除了在__main__中定义全局变量外,还可以在文件开头使用global显式声明全局变量。不过通常不这么做。一般仅会在文件头使用全大写变量名定义全局常量。
本文为原创文章,独家发布在blog.csdn.net/TracelessLe。未经个人允许不得转载。如需帮助请email至tracelessle@163.com。

[1] python中定义全局变量的方法 - 编程语言 - 亿速云
[2] main — Top-level code environment — Python 3.10.3 documentation
前言__main__方法作为Python编程环境的程序入口,可以定义一些变量,这些变量默认为全局变量,可供其他方法使用。但是使用的过程需要注意一些事项,否则会出现报错。__main__方法中的变量import argparse# TracelessLe注:代码示例,不可直接执行def test_fun1(): print("pathA: ", pathA)if __name__ == "__main__": parser = argparse.ArgumentParser(
字符串插值x = y +'jain'
浮点格式和字符串格式(值:width.precision)
print('我叫rishabh {last},我有{money:1.3f}'。format(last ='jain',money = 50.3145))
从(未来)导入
global 标志实际上是为了提示 python 解释器,表明被其修饰的变量是全局变量。这样解释器就可以从当前空间 (current scope) 中读写相应变量了。
Python 的全局变量是模块 (module) 级别的
每个 python 函数拥有对应的 __globals__ 字典,该字典与函数所属模块的 __dict__ 字典完全相同。函数的全局变量也会从这个字典中获取
注:上面三句话的意思就是,python 解释器发现函数中的某个变量被 global 关键字修饰,就去函数的 __globals__ 字典变量中寻找(因为 python 中函数也是一等对象);同
那么这一行代码有什么具体的作用呢,不加的话会对我们的结果造成影响吗?
__name__
首先对于用双下划线开头且结尾的变量,在 Python 中被称为内置变量,除了 __name__,我们常见的还有 __init__,__dict__ 等等.那么有多少内置变量呢?我们可以通过下面在交互界面输入下面的命令,查看 Python 全部内置变量和内置函数
>>> dir(__builtins__)
很多python的初学者可能都会遇到一个问题:__name__是什么意思?
在刚开始学习python的时候,我们总会看到这样一句代码:
if __name__ == “__main__”:
一开始我以为这句代码的意思和C语言中的main函数一样,程序从这里开始执行,但后来经过查询资料发现,两者并不完全相同,这里做一些解释:
__name__是一个变量,前后加了双下划线是因为这是系统定义的名字(python中系统变量都是双下划綫开头结尾),普通变量不使用这种命名方式;
python有很多模块,这些模块是可以独立运行的(这一点与C语言和C
python学习:解决如何在函数内处理数据而不影响原列表
关于一个如何在函数内修改三阶矩阵。
在python里,如果想要定义一个函数,把列表当c++里的形参传进去,显然是不可能的。在python里,只存在引用传递和值传递,当传进去的是一个值的时候,就是值传递,当传进去是一个列表或者是字典的时候,就是引用传递。
引用传递到函数内操作的话,在函数外的列表或者是字典也会随之改变。看来python也有不方...
1. 摘要
通俗的理解__name__ == '__main__':假如你叫小明.py,在朋友眼中,你是小明(__name__ == '小明');在你自己眼中,你是你自己(__name__ == '__main__')。
if __name__ == '__main__'的意思是:当.py文件被直接运行时,if __name__ == '__main__'之下的代码块将被运行;当.py文件以模...
variable_name = variable_value
例如x = 5 这个操作过程就是赋值,意思就是把整型数字5赋值给了变量x,用等号来连接变量名和值。赋值之后就可以在表达式中使用x这个变量了,它代表的含义为整型数字5。
变量的分为局部作用域、...
估计很多人跟我一样初学python看代码的时候先找一下main()方法,从main往下看。但事实上python中是没有你理解中的“main()”方法的。言归正传
if __name__ == "__main__":可以看成是python程序的入口,就像java中的main()方法,但不完全正确。
事实上python程序是从上而下逐行运行的,在.py文件中,除了def后定义函数外的代码都会被认为是...
python是一种解释型脚本语言,和C/C++语言不同,C/C++程序从main函数开始执行,python程序从开始到结尾顺序执行。先总结下python中的main函数的作用:让模块(函数)可以自己单独执行(调试),相当于构造了调用其它函数的入口,这就类似于C/C++里面的main函数了。
一方面:我们想要自己单独执行(调试)
这里我们实际调试一下(假设这个文件是test.py):
#t...
在Python中定义一个函数时,就会把变量空间划分为全局变量(global)与局部变量(local),如果是定义在一个类的成员函数中,那么就还有额外的成员变量(self)空间。那么,如果在实际操作中,想把这几种不同的变量空间做一个分离的话,有没有办法呢?
读取和修改局部变量
首先来看一下局部变量的读取,一般有locals()、vars()和sys._getframe(0).f_code...
__name__ 是一个特殊变量,用于表示当前模块的名称。在一个 Python 文件中,当它被直接运行时,__name__ 的值为 "__main__",当它被作为模块导入时,__name__ 的值为模块的名称。可以使用 __name__ 来判断当前模块是被导入还是直接运行。例如:
if __name__ == "__main__":
# 当前模块被直接运行
else:
# 当前模块被导入
这样可以在模块被导入时不执行一些特定的代码,只在模块被直接运行时执行。
blaton: