小编Mav*_*ckD的帖子

当包含可变对象的元组不是时,为什么包含可变对象的NamedTuple是可哈希的?

我理解为什么tuple包含可变对象的list内容不可清除,因为list元组中的项仍然可以更新.

例:

# hashable
tuple_test = (1,2,3)
print(tuple_test.__hash__())
Run Code Online (Sandbox Code Playgroud)

虽然这不是可以清洗的:

# Not hashable

tuple_test2 = (1,2, [1,2])
print(tuple_test2.__hash__())
Run Code Online (Sandbox Code Playgroud)

以上对我有意义.

但是,当我创建一个namedtuple带有list项目时,它仍然可以清洗:

# hashable
named_tuple = namedtuple("TestTuple", 'name age')
Run Code Online (Sandbox Code Playgroud)

当我添加一个list:

# still hashable
named_tuple = namedtuple("TestTuple", ["name", "age"])
print(named_tuple(name="adam", age=20).__hash__())
Run Code Online (Sandbox Code Playgroud)

为什么元组和命名元组之间存在这种差异?

python namedtuple

10
推荐指数
1
解决办法
883
查看次数

内置模块计算最小公倍数

我目前使用的函数接受两个数字,并使用循环查找这些数字的最小公倍数,

def lcm(x, y):
   """This function takes two
   integers and returns the L.C.M."""

   # choose the greater number
   if x > y:
       greater = x
   else:
       greater = y

   while(True):
       if((greater % x == 0) and (greater % y == 0)):
           lcm = greater
           break
       greater += 1

   return lcm
Run Code Online (Sandbox Code Playgroud)

python是否有内置模块可以代替编写自定义函数呢?

python

6
推荐指数
3
解决办法
7217
查看次数

使用 Makefile 和 make 命令进行 pytest

我是第一次学习测试驱动开发。我没有软件开发经验,但有一些脚本编写经验。

\n\n

我一直在关注 LinuxAcademy Python 3 for Sys Admin 教程。

\n\n

我创建了以下结构,

\n\n
\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Makefile\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Pipfile\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Pipfile.lock\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 README.rst\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 setup.py\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 src\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 pgbackup\n\xe2\x94\x82\xc2\xa0\xc2\xa0     \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 cli.py\n\xe2\x94\x82\xc2\xa0\xc2\xa0     \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 __init__.py\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 tests\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 test_cli.py\n
Run Code Online (Sandbox Code Playgroud)\n\n

setup.py文件,

\n\n
from setuptools import setup, find_packages\n    with open(\'README.rst\', \'r\') as f:\n        readme = f.read()\n    setup(\n        name=\'pgbackup\',\n        version=\'0.1.0\',\n        description=\'Database backups locally or to AWS S3.\',\n        long_description=readme,\n        author=\'Keith Thompson\',\n        author_email=\'keith@linuxacademy.com\',\n        packages=find_packages(\'src\'),\n        package_dir={\'\': \'src\'},\n    )\n
Run Code Online (Sandbox Code Playgroud)\n\n

Makefile文件,

\n\n
.PHONY: install test\n\ndefault: test\n\ninstall:\n        pipenv install --dev --skip-lock\n\ntest:\n        PYTHONPATH=./src pytest\n
Run Code Online (Sandbox Code Playgroud)\n\n

tests/test_cli.py …

python makefile

6
推荐指数
1
解决办法
6475
查看次数

如何在状态 sls 文件中注释 jinja 代码(# 不起作用)

我在状态文件中注释掉 jinja 代码时遇到问题,我在 sls 文件中有一个 for 循环

{% for user_name in salt['pillar.get']('userlist') %}

get_user:
    - Some code here
    ....

{% endfor %}
Run Code Online (Sandbox Code Playgroud)

我用 注释掉它#,但是当我在小兵中执行状态时,循环仍在运行。

# {% for user_name in salt['pillar.get']('userlist') %}

get_user:
    - Some code here
    ....

# {% endfor %}
Run Code Online (Sandbox Code Playgroud)

我缺少什么?

salt-stack

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

json 编码器 json.dump 和 json.dumps 的不同结果

我有一个这种格式的字符串,

d = {'details': {'hawk_branch': {'tandem': ['4210bnd72']}, 'uclif_branch': {'tandem': ['e2nc712nma89', '23s24212', '12338cm82']}}}
Run Code Online (Sandbox Code Playgroud)

我想以这种格式将它写入文件,将列表转换为字典并value为列表中的每个值添加单词作为键,所以{'tandem': ['4210bnd72']}应该成为

  "tandem": {
    "value": "4210bnd72"
  }
Run Code Online (Sandbox Code Playgroud)

这是预期的输出文件,

{
  "details": {

    "hawk_branch": {
      "tandem": {
        "value": "4210bnd72"
      }
    },
    "uclif_branch": {
      "tandem": {
        "value": "e2nc712nma89",
        "value": "23s24212",
        "value": "12338cm82",
      }
    }
    }
}
Run Code Online (Sandbox Code Playgroud)

在这里问了一个问题,有人回答使用json.JSONEncoder

class restore_value(json.JSONEncoder):
    def encode(self, o):
        if isinstance(o, dict):
            return '{%s}' % ', '.join(': '.join((json.encoder.py_encode_basestring(k), self.encode(v))) for k, v in o.items())
        if isinstance(o, list):
            return '{%s}' % …
Run Code Online (Sandbox Code Playgroud)

python json python-3.x

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

grep 匹配整个证书?

我正在运行一个生成这样的证书请求的命令,

some text
some text
certificate is -----BEGIN CERTIFICATE REQUEST-----
MIIEiDCCAnACAQAwGDEWMBQGA1UEAxMNdGVzdHZhdWx0LmNvbTCCAiIwDQYJKoZI
hvcNAQEBBQADggIPADCCAgoCggIBALoGVu7JqQ/60rEZhP2AvRRxf0p9PcQLB8KU
yy/39m2FX5gwPbjzdmenCYzTRV/CHFh3FnK+x+UwCBkAHIBRJfyl5V/V2sdqh0Tm
YEAPQVIoWcH/P7Q8FSxdnBXepnZak33PHt6We76TdxlmJ+OSLPT4XzKX7gTPGSxW
L0tEuzLxkMieigx8TFtLGpe5CWshOe/oiUHR6g9Ehf6s4vIvT7quSGYJWgfD7PI0
+QfuOhg2ldlNKnDm+chkHFYO2rVS+42zhuGk8C/wIElgrsICl1Xpzna2ZmkuscF9
Gir2HVGPtkxB13CyK9jne8Pxr6jRwkGPny7x4czZfafz3sgVo2WmonmaXpXp8od4
aBs1b1VhJuegWo6j2r8TS9scG5o4GTxwCXNeFQnXB+tWDRV7MH6DW/gWEBV/e0QB
RKfhlPhEUd8bgzYwe8gi6ikIoY7RpyXMeV5iVwU3498+ok0v1JlF813Fdx/47nLe
AY/w3vrTJdioJ6y7h1H9GQGb1vpx9HaXsJEpSVxeeNygAJZpuWXOFBiGF2EpN0Uq
YllwAGHYe9ihKXCrRt8rgust+iE4uEw+ypRxNMTGiPxv+jkEwmd5SZODXoSh6OVb
y06bGIilBbITO5bG0bXJrOFOZzOP37oEwX/8+zNX8lEhPh4IlizwA83Rl08wkk2N
H8lL+hnBAgMBAAGgKzApBgkqhkiG9w0BCQ4xHDAaMBgGA1UdEQQRMA+CDXRlc3R2
YXVsdC5jb20wDQYJKoZIhvcNAQELBQADggIBAIwP3a80GQJJoyqO3CPPp8Kbpqtd
a11nmSLlw7U+0YRIElk1Z0oTaE1AURnEGcm2URFTMZYqHXDcMYhP4lcNp3kHSj/C
8UOT75rRDjWfkEpHdGdUOKUuLcJxjzWw0BiSsl7Bnz1aG+7qJ/iv2hYOmyDiR4g/
Tt+IIeShJpMxM63y47BzeLmQgugqyLKvgGsyeeQYCblXUBMla4geNhgBnZikGiIy
8MTvhh24CuBPi9DdGwDO8Wly4BKseBTSAAQrsbrkmSbTunSb/6ry83UDV20f2inv
+Y7UaYi6Ww07fX02oMoRY7d1M9hRDrpD5ZRP3huCDHIvLlY+tJdZL0YTHZM/wk+Z
kg44xXOEGNePoDI8RhOSOe6ixSRFt9stW+Mpe19R0UF4tA6YmNMyt43ILcljEHAh
b20SVTCbN9SICccdTjh3qxIXYK2HlRe99Tqo6NTt1xdE3AuJAjZZXDtfKqmqXMi+
HDeeQpYot3spjlklqEVZYqsWOvvWoGKnAjOLBHxD10IaqF4Epnt/OZKq01ZVIRp2
+I09tsiIpHYJCC4br0k6xwz8SUbpPUGiJ+j8N0rcd8I7xjToXtauQ9a9pAHmf0g8
8w5ZqhjSj6//xbFIhrK+SyO/R/W2s2XeUfcBmlyJFb/2zOKZ6CzbCgsjZ8xyfk13
ltjjnB1ecB0sWgpu
-----END CERTIFICATE REQUEST-----
Run Code Online (Sandbox Code Playgroud)

我想将证书自动保存到文件中,但不保存文本certificate is或之前的任何行。

现在我正在使用command | grep -A100 "\-----BEGIN"获取所有行并将其保存到文件中,但我只是使用100行数,但证书不是100行。如何获得包括和之后的确切行数-----BEGIN以便我可以将证书写入文件?

编辑:我也刚刚尝试过这个,command | grep -A$(wc -l) "\-----BEGIN"但它根本不打印任何内容

谢谢。

regex ubuntu awk grep sed

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

re.sub 在一次调用中用不同的单词替换多个模式

我有一个这种格式的文件名,

remote_execute___jenkin%.java
remtoe__plat_jenk.java
Run Code Online (Sandbox Code Playgroud)

我想_用 single替换所有出现的两个或三个_

我已经这样做了,

re.sub('_{2,3}','_',name)
Run Code Online (Sandbox Code Playgroud)

这有效并将所有出现的两个或三个_替换为 single _。但在同一个re.sub电话中,我需要替换.java.jav

我这样做是为了匹配.javaunderscores

\.java$|_{2,3}
Run Code Online (Sandbox Code Playgroud)

但是如何在替换后不使用另一个调用的情况下.java在同一个re.sub调用中进行re.sub替换underscores

现在我就是这样做的,

name = re.sub('_{2,3}','_',name)
name = re.sub('\.java$','jav',name)
Run Code Online (Sandbox Code Playgroud)

我想在一次re.sub通话中完成以上操作

python regex

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

url.json() 和 json.loads() 的区别

我编写了以下代码来从 url 读取示例 JSON 数据,

HEADER = {"content-type": "application/josn"}

session = requests.Session()
session.verify = True
session.headers = HEADER

output = session.request("GET", "https://jsonplaceholder.typicode.com/todos/1", timeout=30)
Run Code Online (Sandbox Code Playgroud)

如果我打印output我得到,

<Response [200]>

如果我做,

output = session.request("GET", "https://jsonplaceholder.typicode.com/todos/1", timeout=30).json()
Run Code Online (Sandbox Code Playgroud)

我得到实际json内容,

{u'completed': False, u'userId': 1, u'id': 1, u'title': u'delectus aut autem'}
Run Code Online (Sandbox Code Playgroud)

但是当我这样做时,

output = session.request("GET", "https://jsonplaceholder.typicode.com/todos/1", timeout=30)
print(json.loads(output))
Run Code Online (Sandbox Code Playgroud)

我明白了,

  File "/usr/lib64/python2.7/json/decoder.py", line 366, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
TypeError: expected string or buffer
Run Code Online (Sandbox Code Playgroud)

有人可以给我举个例子,我应该什么时候使用.json(),什么时候使用json.loads()

python json

0
推荐指数
1
解决办法
459
查看次数

仅使用一个正则表达式匹配段落中的3个单词

我正在努力尝试使用正则表达式完全匹配多个单词,

这是我的文字,

谷歌正在寻求拆除Spotify-Apple在音乐发行方面的"双头垄断",本周在第四次试图说服YouTube数十亿用户支付费用时,对其音乐服务进行了改革.

谷歌周二推出了一项新的音乐订阅服务,并将通过YouTube最昂贵的广告活动推广它.这项名为YouTube音乐的服务模仿了Spotify模式:将有一个免费的广告支持层,功能更加有限,每月10美元的订阅,没有广告和额外的功能.

我想匹配3个单词Spotify-Apple,US10并且extra functions我希望其他一切都被忽略我试过了

\bSpotify-Apple\b(.|\n)*?\bUS10\b(.|\n)*extra functions
Run Code Online (Sandbox Code Playgroud)

它可以突出显示所有三个短语,但也突出显示它们之间的所有文本.我怎么能只匹配三个单词而忽略其他一切呢?我试着忽略它就像使用一样^,

\bSpotify-Apple\b^(.|\n)*?\bUS10\b^(.|\n)*extra functions
Run Code Online (Sandbox Code Playgroud)

javascript regex

-1
推荐指数
1
解决办法
85
查看次数

标签 统计

python ×6

regex ×3

json ×2

awk ×1

grep ×1

javascript ×1

makefile ×1

namedtuple ×1

python-3.x ×1

salt-stack ×1

sed ×1

ubuntu ×1