小编Wiz*_*ard的帖子

为什么要使用def main()?

可能重复:
if __name__== "__main__"什么?

我见过一些使用的代码示例和教程

def main():
    # my code here

if __name__ == "__main__":
    main()
Run Code Online (Sandbox Code Playgroud)

但为什么?是否有任何理由不在文件顶部定义您的函数,然后只在其下编写代码?即

def my_function()
    # my code here

def my_function_two()
    # my code here

# some code
# call function
# print(something)
Run Code Online (Sandbox Code Playgroud)

我只是想知道主要有没有押韵?

python coding-style

545
推荐指数
5
解决办法
69万
查看次数

获取可用模块

使用PHP,您可以phpinfo()列出已安装的模块,然后从那里查找它们的功能.

有没有办法查看要导入的软件包/模块?

python libraries

54
推荐指数
4
解决办法
6万
查看次数

用于列表,字典等的Python"最佳格式化实践"

我一直在查看Python文档,以获取大型列表和字典的代码格式化最佳实践,例如,

something = {'foo' : 'bar', 'foo2' : 'bar2', 'foo3' : 'bar3'..... 200 chars wide, etc..}
Run Code Online (Sandbox Code Playgroud)

要么

something = {'foo' : 'bar',
             'foo2' : 'bar2',
             'foo3' : 'bar3',
             ...
             }
Run Code Online (Sandbox Code Playgroud)

要么

something = {
             'foo' : 'bar',
             'foo2' : 'bar2',
             'foo3' : 'bar3',
             ...
             }
Run Code Online (Sandbox Code Playgroud)

如何处理列表/词典的深层嵌套?

python code-formatting

31
推荐指数
4
解决办法
2万
查看次数

NameError:未定义全局名称

我在Mac OS X上使用Python 2.6.1.

我有两个简单的Python文件(下面),但是当我运行时

python update_url.py
Run Code Online (Sandbox Code Playgroud)

我上了航站楼:

Traceback (most recent call last):
  File "update_urls.py", line 7, in <module>
    main()
  File "update_urls.py", line 4, in main
    db = SqliteDBzz()
NameError: global name 'SqliteDBzz' is not defined
Run Code Online (Sandbox Code Playgroud)

我试着以不同的方式重命名文件和类,这就是为什么两端都有x和z的原因.;)

文件sqlitedbx.py

class SqliteDBzz:
    connection = ''
    curser = ''

    def connect(self):
        print "foo"

    def find_or_create(self, table, column, value):
        print "baar"
Run Code Online (Sandbox Code Playgroud)

文件update_url.py

import sqlitedbx

def main():
    db = SqliteDBzz()
    db.connect

if __name__ == "__main__":
    main()
Run Code Online (Sandbox Code Playgroud)

python namespaces class

26
推荐指数
2
解决办法
13万
查看次数

使用来自Python 2的urllib2发出HTTP HEAD请求

我正在尝试使用Python 2对页面执行HEAD请求.

我在尝试

import misc_urllib2
.....
opender = urllib2.build_opener([misc_urllib2.MyHTTPRedirectHandler(), misc_urllib2.HeadRequest()])
Run Code Online (Sandbox Code Playgroud)

misc_urllib2.py

class HeadRequest(urllib2.Request):
    def get_method(self):
        return "HEAD"


class MyHTTPRedirectHandler(urllib2.HTTPRedirectHandler):
    def __init__ (self):
        self.redirects = []

    def http_error_301(self, req, fp, code, msg, headers):  
        result = urllib2.HTTPRedirectHandler.http_error_301(
                self, req, fp, code, msg, headers)
        result.redirect_code = code
        return result

    http_error_302 = http_error_303 = http_error_307 = http_error_301
Run Code Online (Sandbox Code Playgroud)

但我得到了

TypeError: __init__() takes at least 2 arguments (1 given)
Run Code Online (Sandbox Code Playgroud)

如果我这样做

opender = urllib2.build_opener(misc_urllib2.MyHTTPRedirectHandler())
Run Code Online (Sandbox Code Playgroud)

然后它工作正常

python urllib2 head python-2.7

23
推荐指数
1
解决办法
2万
查看次数

向数组添加哈希

我有一个像这样的数组,

@switch_ports = ()
Run Code Online (Sandbox Code Playgroud)

然后想要将这个哈希的50个实例添加到switch_ports数组中

%port = (data1 => 0, data2 => 0, changed => 0)
Run Code Online (Sandbox Code Playgroud)

但是,如果我将哈希值推送到数组中

push(@switch_ports, %port)
Run Code Online (Sandbox Code Playgroud)

但如果我打印@switch_ports,我只是看到了

data10data20changed0
Run Code Online (Sandbox Code Playgroud)

所以它似乎只是将它们添加到数组中,(加入它们)如果我尝试循环数组并打印键,它也会失败.

我想我会因为把头撞到桌子上而变得迟钝.

1 - 你可以在一个数组中存储哈希吗?

2 - 你有一系列哈希吗?

试图得到......

switchports
    0
        data1
        data2
        changed
    1
        data1
        ....
Run Code Online (Sandbox Code Playgroud)

从而

foreach $port (@switchport) {
    print $port['data1']
}
Run Code Online (Sandbox Code Playgroud)

将为数组中的所有哈希返回所有data1.

是的,我在Perl失败了

arrays perl hashtable multidimensional-array

23
推荐指数
2
解决办法
5万
查看次数

检查线程/从列表中删除

我有一个扩展Thread的线程.代码看起来有点像这样;

class MyThread(Thread):
    def run(self):
        # Do stuff

my_threads = []
while has_jobs() and len(my_threads) < 5:
    new_thread = MyThread(next_job_details())
    new_thread.run()
    my_threads.append(new_thread)

for my_thread in my_threads
    my_thread.join()
    # Do stuff
Run Code Online (Sandbox Code Playgroud)

所以在我的伪代码中,我检查是否有任何作业(如数据库等),如果有一些作业,如果运行的线程少于5个,则创建新线程.

所以从这里,我检查我的线程,这是我卡住的地方,我可以使用.join()但我的理解是 - 然后等待它完成所以如果它检查的第一个线程仍在进行中,它然后等待直到完成 - 即使其他线程已完成....

那么有没有办法检查线程是否完成,然后删除它,如果是这样的话?

例如

for my_thread in my_threads:
    if my_thread.done():
        # process results
        del (my_threads[my_thread]) ?? will that work...
Run Code Online (Sandbox Code Playgroud)

python multithreading list

21
推荐指数
5
解决办法
8万
查看次数

Python - mysqlDB,sqlite结果作为字典

当我做某事的时候

sqlite.cursor.execute("SELECT * FROM foo")
result = sqlite.cursor.fetchone()
Run Code Online (Sandbox Code Playgroud)

我认为必须记住列似乎能够取出它们的顺序,例如

result[0] is id
result[1] is first_name
Run Code Online (Sandbox Code Playgroud)

有没有办法归还字典?所以我可以只使用结果['id']或类似的?

编号列的问题是,如果您编写代码然后插入一个列,您可能需要更改代码,例如first_name的result [1]现在可能是date_joined,因此必须更新所有代码...

python mysql sqlite dictionary dataformat

19
推荐指数
4
解决办法
1万
查看次数

Delphi - 从字符串创建类

我有这样的代码

name := 'Foo';
If name = 'Foo' then
  result := TFoo.Create
else if name = 'Bar' then 
  result := TBar.Create
else if name = 'FooFoo' then
  result := TFooFoo.Create;
Run Code Online (Sandbox Code Playgroud)

有办法吗?

result := $name.create
Run Code Online (Sandbox Code Playgroud)

或者某种基于变量值创建类的方法?

所有类都扩展了相同的基类.

delphi oop object

17
推荐指数
3
解决办法
1万
查看次数

Yii自动数据库迁移

我使用yii的内置迁移工具设置了我的第一个数据库迁移,本地我可以运行

./yiic迁移

我可以看到它说"这个迁移需要运行"并按Y并运行并且工作正常.

当我部署我的网站时,我可以自动运行该命令但不会传递Y.

是否有命令或网址我可以点击升级数据库而无需登录并按Y?

php database-migration yii

13
推荐指数
1
解决办法
8852
查看次数