小编psw*_*han的帖子

为什么有些Python变量保持全局,而有些则需要定义为全局变量

我在理解为什么有些变量是局部的并且有些变量是全局变量时遇到了一些麻烦.例如,当我尝试这个:

from random import randint

score = 0

choice_index_map = {"a": 0, "b": 1, "c": 2, "d": 3}

questions = [
    "What is the answer for this sample question?",
    "Answers where 1 is a, 2 is b, etc.",
    "Another sample question; answer is d."
]

choices = [
    ["a) choice 1", "b) choice 2", "c) choice 3", "d) choice 4"],
    ["a) choice 1", "b) choice 2", "c) choice 3", "d) choice 4"],
    ["a) choice 1", "b) choice 2", "c) choice …
Run Code Online (Sandbox Code Playgroud)

python global-variables

5
推荐指数
1
解决办法
448
查看次数

使用不同的键进行 JSON 解组

我正在尝试从可能具有不同密钥的不同来源解组一些 JSON。例如,我可能有:

{
    "a": 1,
    "b": 2
}
Run Code Online (Sandbox Code Playgroud)

或者我可能有:

{
    "c": 1,
    "b": 2
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我可以保证“b”会在那里。但是,我希望“a”和“c”以相同的方式表示。实际上,我想要的是:

type MyJson struct {
    Init int `json:"a",json:"c"`
    Sec  int `json:"b"
}
Run Code Online (Sandbox Code Playgroud)

基本上我希望解组器查找任一键并将其设置为Init. 现在这实际上不起作用(或者我不会发布)。解组第一个给了我我想要的,而第二个设置Init为 0。我理想的选择是解组到一个结构体,有两种可能性之一:

  1. 我用上面的多个标签表示结构
  2. 我定义了多个结构,但可以选择要解组的结构

我尝试通过创建两个不同的结构和一个映射来实现数字 2,但似乎我无法创建一个类型为第二个值的映射:

type MyJson1 struct {
    Init int `json:"a"`
    Sec  int `json:"b"`
}

type MyJson2 struct {
    Init int `json:"c"`
    Sec  int `json:"b"`
}
Run Code Online (Sandbox Code Playgroud)

有没有办法定义一组行为类似于接口的结构?也就是说,它们都具有相同的字段,但定义不同。或者也许还有另一种方法。我可以使这些字段解组“a”和“c”其他字段,然后进行Init相应的设置。但这不会超出几个变体。

谢谢!

json struct go

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

在paramiko中区分文件或目录

我试图遍历目录的内容并确定每个项目是文件还是文件夹。我可以执行此链接中建议的解决方案:

>>> for i in ftp.listdir():
...     lstatout=str(ftp.lstat(i)).split()[0]
...     if 'd' not in lstatout: print i, 'is a file'
... 
Run Code Online (Sandbox Code Playgroud)

这有效,是的。作为旁注,我只是采用第一个字符而不是.split(), so str(ftp.lstati(i))[0] != 'd',因为这在我公认的非科学测试中似乎更快。

但这似乎非常hacky,所以我尝试查看其他方法。在几个文件夹的 SFTP 属性中,我看到:

<SFTPAttributes: [ size=4096 uid=1002 gid=1002 mode=040755 atime=1358785383 mtime=1359475285 ]>
Run Code Online (Sandbox Code Playgroud)

而对于文件,我看到:

<SFTPAttributes: [ size=72 uid=1002 gid=1002 mode=0100644 atime=1367598914 mtime=1367598914 ]>
Run Code Online (Sandbox Code Playgroud)

因此,该模式似乎010[permissions]适用于文件和040[permissions]目录(与我见过的少数目录一致,但不能说它是通用的)。这似乎是获取项目属性的更好方法!但是,当我使用 时ftp.stat(i).st_mode,我得到了不同的值——16877对于上述目录和33188上述文件。

这些是什么意思?有没有办法可以将该整数转换为文件模式?(我试过谷歌,但找不到任何相关的东西。)或者,有没有什么好的方法可以在不依赖str(lstat(i))返回“d”或不返回“d”的函数的情况下确定这一点?

python attributes file mode paramiko

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

标签 统计

python ×2

attributes ×1

file ×1

global-variables ×1

go ×1

json ×1

mode ×1

paramiko ×1

struct ×1