如何在python中的函数之间共享变量?

2024-09-27 22:22:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个函数fun1fun2,它们分别接受一个字符串和一个数字作为输入。这两个也作为输入获取相同的变量a。这是代码:

a = ['A','X','R','N','L']

def fun1(string,vect):
    out = []
    for letter in vect:
        out. append(string+letter)
    return out

def fun2(number,vect):
    out = []
    for letter in vect:
        out.append(str(number)+letter)
    return out

x = fun1('Hello ',a)
y = fun2(2,a)

函数执行一些无意义的操作。我的目标是重写代码,使变量a在函数之间共享,这样它们就不再将其作为输入。

删除变量a作为输入的一种方法是在函数本身中定义它,但不幸的是这不是很优雅。 你能给我推荐一种可能的方法来达到我的目标吗?

函数应该以相同的方式操作,但是输入参数应该只是字符串和数字(fun1(string)fun2(number))。


Tags: 函数字符串代码innumberforstringdef
3条回答

使用类的替代方法: 您可以使用global关键字来使用位于函数外部的变量。

a = 5
def func():
    global a
    return a+1

print (func())

这将打印6

但应尽量避免全局变量

面向对象编程有助于:

class MyClass(object):
    def __init__(self):
        self.a = ['A','X','R','N','L']  # Shared instance member :D

    def fun1(self, string):
        out = []
        for letter in self.a:
            out.append(string+letter)
        return out

    def fun2(self, number):
        out = []
        for letter in self.a:
            out.append(str(number)+letter)
        return out

a = MyClass()
x = a.fun1('Hello ')
y = a.fun2(2)

由于a是在函数作用域之外且在定义函数之前定义的,因此不需要将其作为参数馈送,只需使用a。Python将首先查看变量是否在函数作用域中定义,如果没有,它将在该作用域之外进行查看。

a = ['A','X','R','N','L']

def fun1(string):
    out = []
    for letter in a:
        out.append(string+letter)
    return out

def fun2(number):
    out = []
    for letter in a:
        out.append(str(number)+letter)
    return out

x = fun1('Hello ')
y = fun2(2)

在这种情况下,您还可以将函数重写为更优雅的列表理解:

a = ['A','X','R','N','L']

def fun1(string):
    return [string+letter for letter in a]

def fun2(number):
    return [str(number)+letter for letter in a]

x = fun1('Hello ')
y = fun2(2)

相关问题 更多 >

    热门问题