2014-12-05 15 views
-1

如果我写:Python函数号不会影响它运行多少次?

def f(n): 
    blah 
f(x) 

这时只要“X”是一个数字,F将运行一次。例如我刚刚尝试过:

def f(n): 
    c = 1 
    print c 
f(x) 

'x'为0,然后为10,输出为'1'两次。数字'x'实际上代表什么,以及如何让函数运行'x'次数?

我已经用解决方法解决了我的问题(我之前会发布此问题,但显然我仅限于每90分钟发布一次),但我仍然想知道未来。

我的程序看起来与此类似:

def f(n): 
    m = 0 
    c = blah 
    if condition(c): 
     m = 1 
    d = line involving c that had to be run before the end of the function loop, but after the if statement 
    f(m) 
f(1) 

但产量不断循环,因为即使m = 0时,F(0)还是造成了功能循环。我的解决方法是:

m = 0 

def f(n): 
    global m 
    m = 0 
    c = blah 
    if condition(c): 
     m = 1 
    else: 
     m = 0 
    d = line involving c that had to be run before the end of the function loop, but after the if statement 
    if m = 1: 
     f(1) 
f(1) 

后就正常了(实际上,回头看的话,我不认为“d”确实需要if语句后运行,所以我可以,如果条件刚刚做了(c):f(1)),但似乎是多余的。我不知道为什么我必须为f(n)指定一个数字,但是如果我将它留空或输入一个字符串,它将无法运行。有没有一个“笨拙”的解决办法呢?

(我真的很新的节目,所以请解释相当简单而言..!)

谢谢!

回答

3

如果你想要运行一些东西,你只需要编写一些描述循环。对于已知的提前量,可以使用for

def f(n): 
    for i in range(n): 
     print i+1, "Pax is awesome" 
    print 

x = 3 
f(x) 
f(x-1) 
f(7) 

运行该代码会给你:

1 Pax is awesome 
2 Pax is awesome 
3 Pax is awesome 

1 Pax is awesome 
2 Pax is awesome 

1 Pax is awesome 
2 Pax is awesome 
3 Pax is awesome 
4 Pax is awesome 
5 Pax is awesome 
6 Pax is awesome 
7 Pax is awesome 

如果你想循环,直到一般条件遇到(而不是固定次数),则可以使用while而不是for

def f(n): 
    while (n % 8) != 0: 
     print n, "Pax is awesome" 
     n += 1 
f(3) 

这个循环将继续运行,直到n达到八的倍数:

3 Pax is awesome 
4 Pax is awesome 
5 Pax is awesome 
6 Pax is awesome 
7 Pax is awesome 

你的解决方法似乎有点紧张,尤其是在这个意义上,他们使用完全没有必要递归。

您应该瞄准清晰度代码作为您的主要目标(我称这为可读性优化)。这样做会使代码不太可能包含错误,并且更容易维护。

+0

哦,好的,所以如果我把范围(n)放在我的范围内:... if:n + = 1或者什么的 - 那可行吗?虽然我猜想,因为它只在函数的开始处读取'in range in(n)',所以if命令不会改变任何内容,并且该函数仍然只会运行一次。 – Patrik333 2014-12-05 03:13:39

+0

此外,我仍然不确定为什么函数首先需要一个参数,因为您可以只写“for i in range(x)”,而不是......?我想这样写起来更容易,就像你调用函数时那样? – Patrik333 2014-12-05 03:20:12

+0

@Patrik,你不需要_change_'i','for-range'循环为你做。而且,就参数而言,这只是良好的编码习惯。你可能想从其他地方调用函数,使用'y'或'42'。我将修改示例以显示这两个功能。 – paxdiablo 2014-12-05 03:20:16