我有这个功能:
def binary_numbers(a):
for x in range(1, a):
return bin(x)
Run Code Online (Sandbox Code Playgroud)
我希望这个打印从0 my_input到此命令的每个二进制数.
print binary_numbers(my_input)
Run Code Online (Sandbox Code Playgroud)
所以,如果我写5作为参数,我希望它打印
0b0
0b1
0b10
0b11
0b100
0b101
Run Code Online (Sandbox Code Playgroud)
但是,当我用5调用它时,我得到的是:
>>> print binary_numbers(5)
'0b1'
Run Code Online (Sandbox Code Playgroud)
谁能解释我为什么?
问题是,你的函数在处理完第一个数字后立即返回(因为控件到达return语句)
解决这个问题的四种方法
立即打印
def binary_numbers(a):
for x in range(1, a):
return bin(x) # Dont return here, instead print bin(x)
binary_numbers(5)
Run Code Online (Sandbox Code Playgroud)构造一个具有理解力的列表并将其返回
def binary_numbers(a):
return [bin(x) for x in range(1, a)]
Run Code Online (Sandbox Code Playgroud)使用这样的map函数构造一个列表
def binary_numbers(a):
return map(bin, range(1, a))
Run Code Online (Sandbox Code Playgroud)使用这样的yield关键字创建一个生成器
def binary_numbers(a):
for x in range(1, a):
yield bin(x)
for current_binary_number in binary_numbers(5):
print current_binary_number
Run Code Online (Sandbox Code Playgroud)