什么是这个C/C++代码的惯用Python等价物?
void foo()
{
static int counter = 0;
counter++;
printf("counter is %d\n", counter);
}
Run Code Online (Sandbox Code Playgroud)
具体来说,如何在功能级别实现静态成员,而不是类级别?将函数放入类中会改变什么吗?
Python范围规则究竟是什么?
如果我有一些代码:
code1
class Foo:
code2
def spam.....
code3
for code4..:
code5
x()
Run Code Online (Sandbox Code Playgroud)
在哪里x找到?一些可能的选择包括以下列表:
在执行期间,当函数spam在其他地方传递时,也存在上下文.也许lambda函数的传递方式有点不同?
某处必须有简单的参考或算法.对于中级Python程序员来说,这是一个令人困惑的世界.
如果我有这样的功能:
def foo(name, opts={}):
pass
Run Code Online (Sandbox Code Playgroud)
我想在参数中添加类型提示,我该怎么做?我假设的方式给了我一个语法错误:
def foo(name: str, opts={}: dict) -> str:
pass
Run Code Online (Sandbox Code Playgroud)
以下不会抛出语法错误,但它似乎不是处理这种情况的直观方式:
def foo(name: str, opts: dict={}) -> str:
pass
Run Code Online (Sandbox Code Playgroud)
我在typing文档或Google搜索中找不到任何内容.
编辑:我不知道默认参数在Python中如何工作,但为了这个问题,我将保留上面的例子.一般来说,做以下事情要好得多:
def foo(name: str, opts: dict=None) -> str:
if not opts:
opts={}
pass
Run Code Online (Sandbox Code Playgroud) 我试图在Python中实现方法重载:
class A:
def stackoverflow(self):
print 'first method'
def stackoverflow(self, i):
print 'second method', i
ob=A()
ob.stackoverflow(2)
Run Code Online (Sandbox Code Playgroud)
但输出是second method 2; 类似的:
class A:
def stackoverflow(self):
print 'first method'
def stackoverflow(self, i):
print 'second method', i
ob=A()
ob.stackoverflow()
Run Code Online (Sandbox Code Playgroud)
给
Traceback (most recent call last):
File "my.py", line 9, in <module>
ob.stackoverflow()
TypeError: stackoverflow() takes exactly 2 arguments (1 given)
Run Code Online (Sandbox Code Playgroud)
我该如何工作?
我最初错误地编写了程序.我没有在一个范围(即startNumber 1,endNumber 20应该=只有1和20之间的数字)之间返回Fibonacci数,而是为程序编写了显示范围之间的所有Fibonacci数(即startNumber 1,endNumber 20)显示=前20个斐波纳契数).我以为我有一个确定的代码.我也不明白为什么会这样.
startNumber = int(raw_input("Enter the start number here "))
endNumber = int(raw_input("Enter the end number here "))
def fib(n):
if n < 2:
return n
return fib(n-2) + fib(n-1)
print map(fib, range(startNumber, endNumber))
Run Code Online (Sandbox Code Playgroud)
有人在我的第二部分(因为重复而关闭 - /sf/ask/35293541/)指出我需要使用while循环通过生成器传递startNumber和endNumber.有人可以指点我如何做到这一点?欢迎任何帮助.
我是一名学习程序员,而且我遇到了一些混乱.我被要求编写一个程序,用于通过用户输入的起始编号和结束编号来计算和显示斐波纳契序列(即startNumber = 20 endNumber = 100,它将仅显示该范围之间的数字).诀窍是包含它(我不知道如何在Python中使用它? - 我假设这意味着使用包含范围?).
到目前为止我所拥有的不是实际编码,而是:
我不知道从哪里开始,我正在询问如何写这个的想法或见解.我也尝试过编写Fib序列论坛,但我也迷失了.
不知何故,在下面的Node类中,wordList和adjacencyList变量在Node的所有实例之间共享.
>>> class Node:
... def __init__(self, wordList = [], adjacencyList = []):
... self.wordList = wordList
... self.adjacencyList = adjacencyList
...
>>> a = Node()
>>> b = Node()
>>> a.wordList.append("hahaha")
>>> b.wordList
['hahaha']
>>> b.adjacencyList.append("hoho")
>>> a.adjacencyList
['hoho']
Run Code Online (Sandbox Code Playgroud)
有没有什么方法可以继续使用默认值(在这种情况下为空列表)的构造函数参数,但要让a和b都有自己的wordList和adjacencyList变量?
我正在使用python 3.1.2.
有时,使用默认参数(即空列表)似乎很自然.然而,Python在这些情况下会出现意外行为.
例如,我有一个功能:
def my_func(working_list = []):
working_list.append("a")
print(working_list)
Run Code Online (Sandbox Code Playgroud)
第一次使用默认值调用它将起作用,但之后的调用将使用不断更新的列表.
那么,获得我想要的行为的pythonic方法是什么(每个调用都有一个新的列表)?
我把空括号作为Python函数的可选参数的默认值,而pylint(使用Sublime包)告诉我这很危险.有人可以解释为什么会这样吗?而使用None是更好的选择吗?
我正在阅读一些旧代码,试图理解它的作用,我偶然发现了这个奇怪的声明:
*x ,= p
Run Code Online (Sandbox Code Playgroud)
p是这个上下文中的列表.我一直试图弄清楚这句话的作用.据我所知,它只是设置x为的值p.例如:
p = [1,2]
*x ,= p
print(x)
Run Code Online (Sandbox Code Playgroud)
只是给
[1, 2]
Run Code Online (Sandbox Code Playgroud)
这有什么不同x = p吗?知道这个语法在做什么吗?
我的大部分编程背景都是用Java编写的,而且我仍然使用Java编写大部分编程.但是,我开始在工作中学习一些辅助项目的Python,我想学习它尽可能独立于我的Java背景 - 即我不想只用Python编写Java.我应该注意哪些事情?
一个简单的例子 - 当浏览Python教程时,我发现了一个函数(例如列表)的默认可变参数被持久化(从调用到调用时记住).这对我作为Java程序员来说是违反直觉的,很难让我理解.(如果您不理解该示例,请参见此处和此处.)
有人还向我提供了这个列表,我觉得这个列表很有用,但很简短.任何人都有任何其他Java程序员可能会滥用Python的例子......?或者Java程序员会错误地假设或难以理解的东西?
编辑:好的,简要概述了我链接的文章所解决的原因,以防止答案中的重复(如比尔蜥蜴所建议的).(如果我在措辞方面犯了错误,请告诉我,我刚开始使用Python,所以我可能完全不了解所有概念.而且免责声明 - 这些将非常简短,所以如果你不明白它在检查链接时会得到什么.)
(如果你觉得这个问题很有意思,那么请查看链接.:)非常好.)
python ×10
python-3.x ×3
class ×1
constructor ×1
fibonacci ×1
java ×1
overloading ×1
pylint ×1
scope ×1
sequences ×1
type-hinting ×1