我是python的新手,所以这可能很容易 我想打印一个类中定义的两个字符串作为静态成员,并使用产生每个字符串的类方法。 这是我想要做的简化版本:
#!/usr/bin/python
import sys
class test:
str1 = "Hello"
str2 = "World\n" #"\n" is needed for the example
def printMe(self):
yield test.str1
yield test.str2
hello = test()
print "Testing initiated:"
sys.stdout.write(hello.printMe())
sys.stdout.write(hello.printMe())
这是输出:
sys.stdout.write(hello.printMe())TypeError:期望一个字符
缓冲对象
答案 0 :(得分:1)
你应该做这样的事情
for line in hello.printMe():
print line
但实际上有比使用yield语句更简单的方法。
答案 1 :(得分:1)
您正在尝试使用生成器功能,请阅读yield
关键字here
import sys
class Test:
def __init__(self): # it's possible to initialise these attributes in the __init__ method, so they are created on class instantiation(when you did hello = Test())
self.str1 = "Hello"
self.str2 = "World\n" #"\n" is needed for the example
def printMe(self):
for i in [self.str1, self.str2]:
yield i
app = Test()
print "Testing initiated:"
for i in app.printMe():
print i # is there a reason why you can't use print?
但是,如果你想在代码中的特定点一次打印一行,就像你在评论中提到的循环一样:
gen = app.printMe()
然后每次你想要打印:
gen.next()
这会触发下一个yield语句。生成器函数有效地“保持”/记住它的位置,直到你再次调用next,直到所有的yield语句都被产生为止。
答案 2 :(得分:0)
你可以这样做,但我正在使用print
,希望这可以帮到你:
class test:
str1 = "Hello"
str2 = "World\n" #"\n" is needed for the example
def printMe(self):
yield test.str1
yield test.str2
hello = test()
print "Testing initiated:"
out = hello.printMe()
print(out.next(),end=' ')
print(out.next(),end=' ')
答案 3 :(得分:0)
使用yield将您的函数转换为生成器。如果这真的是你想要的,你将需要迭代生成器来获取值:
gen = hello.printMe()
sys.stdout.write(gen.next())
sys.stdout.write(gen.next())
或更好:
for prop in hello.printMe():
sys.stdout.write(prop)
答案 4 :(得分:0)
您的printMe方法是一个生成器函数,它返回一个可迭代的函数。你需要迭代它才能得到结果:
for item in hello.printMe():
print item