在Python中更改函数参数的值

时间:2016-02-22 12:04:45

标签: python function oop reference arguments

我一般都是Python和OOP的新手(到目前为止,我一直在用C语言进行编程),我对有关更改多个变量值的函数有疑问。我正在对字符串进行词法和句法分析,并创建了一个逐个获取字符的函数。 代码:

def getchar(string, char):

    if string:
        char=string[0]
        string=string[1:]
    else:
        char=""

我不介意将字符串销毁。问题是我需要更改char和string的值,这在C中将通过解除引用&来完成。有什么方法可以在Python中实现这一点吗?另外:如果解决方案涉及对象和类,我会很感激,如果你可以稍微愚蠢一点,因为我对它们的经验很少。

提前致谢!

2 个答案:

答案 0 :(得分:2)

您不会,也不能修改参数的值;字符串在Python中是不可变的。相反,只需返回新值并在调用者中重新分配它们。

def getchar(string, char):
    ...
    return string, char

...

newstring, newchar = getchar(string, char)

请注意,通常尝试用一种语言编程就好像是另一种语言一样。 Python不是C,你不应该尝试应用像“解除引用”这样的C概念,这些概念在没有指针的语言中没有任何意义。

答案 1 :(得分:0)

在python中,您可以通过char迭代字符串char。但是您无法修改字符串,您必须创建一个新字符串(尽管您可以使用相同的名称)。

E.g。

old_string = 'test'
for ch in string:
    print(ch)

会得到你:

 t
 e
 s
 t

对于你的例子,你好'在评论中,你可以使用generator:

  #define generator function  
  def char_gen(str_in):
       for ch in str_in:
           str_in = str_in[1:]
           yield ch, str_in

  #initiate generator for your string
  hello_gen = char_gen('hello')

  #now every call to next() will get you a character and the rest of the string
  #and raise StopIteration exception, when the generator is emptied

  print(next(hello_gen))
  print(next(hello_gen))
  print(next(hello_gen))
  print(next(hello_gen))
  print(next(hello_gen))
  print(next(hello_gen))

将打印:

('h', 'ello')
('e', 'llo')
('l', 'lo')
('l', 'o')
('o', '')
Traceback (most recent call last):
  File "test.py", line 13, in <module>
    print(next(hello_gen))
StopIteration

或者您可以在循环中使用它:

hello_gen = char_gen('hello')
for ch, st in hello_gen:
     print(ch, st)

会给你:

h ello
e llo
l lo
l o
o 
Traceback (most recent call last):
  File "test.py", line 11, in <module>
    print(next(hello_gen))
StopIteration