Python入门-全局变量、main函数

一、全局变量

在函数外面声明的变量称为全局变量,程序中的任何函数都可以读取它。但是,在函数中给全局变量重复赋值需要特小心。如以下代码:

#global.py
name='Tony'
def say_hello():
    print('Hello '+name+'!')
def change_name(new_name):
    name=new_name

第一个name变量是全局变量,因为它是函数外面声明的。函数say_hello()读取变量name的值,将其打印到屏幕上,这和预期的一致:

>>> say_hello()
Hello Tony!


然而,调用change_name时结果却不符合预期:

>>> change_name('Evan')
>>> say_hello()
Hello Tony!

全局变量name的值并没有发生变化,依然是Tony。问题在于Python将函数change_name中的变量name视为局部变量。

要访问全局变量,必须使用关键字global;

#global_correct.py
name='Tony'
def say_hello():
    print('Hello '+name+'!')
def change_name(new_name):
    global name
    name=new_name


这两个函数均符合预期:

>>> say_hello()
Hello Tony!
>>> change_name('Evan')
>>> say_hello()
Hello Evan!


二、使用main函数

编写相应Python程序时,通常至少有一个函数:main()。因为根据约定,main()函数被认为是程序的起点。例如:

#password.py
def main():
  pwd=input('What is the password?')
  if pwd=='intely':
      print('logging on...')
  else:
      print('Incorrect password.')
  print('All done.')


注意:所有的代码都位于函数头main后面,并缩进了。

运行该代码的时候,什么都不会发生,而只是出现一个提示符号。必须要输入main()来执行该代码。

结果:

>>> main()
What is the password?inte
Incorrect password.
All done.
>>> main()
What is the password?intely
logging on...
All done.


使用main函数的优点是:可以更轻松地反复运行程序,还可以传递输入值。


Python 进程间可以共享全局变量Python 的 `multiprocessing` 模块提供了多个进程间通信(IPC)的方式,其中包括共享内存(Shared Memory)和消息传递(Message Passing)。这些方法可以让进程间共享数据,包括全局变量。 一种实现方式是使用 `multiprocessing.Value` 和 `multiprocessing.Array` 函数创建共享变量。`Value` 可以创建一个共享的标量变量,而 `Array` 可以创建共享的数组变量。 例如,我们希望创建一个共享整数变量 `count`,可以使用 `Value` 函数如下: ```python from multiprocessing import Process, Value def increment(count): count.value += 1 if __name__ == '__main__': count = Value('i', 0) processes = [] for _ in range(10): p = Process(target=increment, args=(count,)) p.start() processes.append(p) for p in processes: p.join() print(count.value) # 输出结果为 10 ``` 另一种方式是使用 `multiprocessing.Manager` 类,它可以创建一个 `Namespace` 对象,该对象可以作为全局变量在进程之间共享。当然,由于使用了进程管理器,这种方式在性能上可能会有一些损耗。 ```python from multiprocessing import Process, Manager def increment(count): count.value += 1 if __name__ == '__main__': manager = Manager() count = manager.Namespace() count.value = 0 processes = [] for _ in range(10): p = Process(target=increment, args=(count,)) p.start() processes.append(p) for p in processes: p.join() print(count.value) # 输出结果为 10 ``` 综上所述,Python 进程间可以通过共享内存或消息传递来实现全局变量的共享。通过使用 `multiprocessing` 模块提供的函数和类,我们可以很方便地在多个进程之间共享数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值