我一般都是Python和OOP的新手(到目前为止,我一直在用C语言进行编程),我对有关更改多个变量值的函数有疑问。我正在对字符串进行词法和句法分析,并创建了一个逐个获取字符的函数。 代码:
def getchar(string, char):
if string:
char=string[0]
string=string[1:]
else:
char=""
我不介意将字符串销毁。问题是我需要更改char和string的值,这在C中将通过解除引用&来完成。有什么方法可以在Python中实现这一点吗?另外:如果解决方案涉及对象和类,我会很感激,如果你可以稍微愚蠢一点,因为我对它们的经验很少。
提前致谢!
答案 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