小编Jim*_*ard的帖子

命名和未命名类型

问题:

我最近开始阅读Golang 规范手册,并试图理解相关部分中命名和未命名类型.我来自一种动态的语言,这让我有点头疼.

手册说明:

类型确定特定于该类型值的值集和操作集.类型可以是命名的或未 命名的.命名类型由(可能合格的)类型名称指定 ; 使用类型文字指定未命名的类型,类型文字从现有类型组成新类型.

并继续:

预先声明了布尔,数字和字符串类型的命名实例.可以使用类型文字构造复合类型 - 数组,结构,指针,函数,接口,切片,映射和通道类型.

这里的问题是,随着规范的出现,这些链接让我跳到了页面上,并且忘记了那么多概念太快被我抛出的东西.


其他资源:

我已经四处寻找澄清,除了规范手册之外,资源很少.我能找到的唯一相关材料是:

不幸的是,我在Stack Overflow上找不到任何有关此问题的相关问题.(如果它们存在,我需要修改我的搜索方法!).我问,因为理解新语言的类型系统是有效学习它的基本概念之一.


那么,问题是:

有人可以提供一个简洁明了的例子,说明命名和未命名类型的概念之间的差异吗?*

*此外,解释合格预先声明的概念将有利于完整性,但显然没有必要.

types type-systems go

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

为什么无参数函数调用执行得更快?

我设置了一个简单的自定义函数,它接受一些默认参数(Python 3.5):

def foo(a=10, b=20, c=30, d=40):
    return a * b + c * d
Run Code Online (Sandbox Code Playgroud)

并且在有或没有指定参数值的情况下定时调用它:

没有指定参数:

%timeit foo()
The slowest run took 7.83 times longer than the fastest. This could mean that an intermediate result is being cached 
1000000 loops, best of 3: 361 ns per loop
Run Code Online (Sandbox Code Playgroud)

指定参数:

%timeit foo(a=10, b=20, c=30, d=40)
The slowest run took 12.83 times longer than the fastest. This could mean that an intermediate result is being cached 
1000000 loops, best of …
Run Code Online (Sandbox Code Playgroud)

python function python-2.7 python-3.x python-internals

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

如何使用Cython在C Struct周围编写完整的Python包装器?

我正在使用Cython为Python的C库编写一个高级接口.
我有一个扩展类型A,它使用指向更复杂的C上下文结构的指针初始化库c_context.指针保存在A.
A还有一个def函数,它又创建另一个扩展类型B,用库函数调用初始化另一个C结构.进行后续库调用需要此结构B.
B需要c_context指针从A其通过我的扩展类型内包裹py_context,以便将其传递到__cinit__B:

#lib.pxd (C library definitions)
cdef extern from "lib.h":
    ctypedef struct c_context:
        pass

#file py_context.pxd
from lib cimport c_context

cdef class py_context:
    cdef c_context *context
    cdef create(cls, c_context *context)
    cdef c_context* get(self)

#file py_context.pyx
def class py_context:
    @staticmethod
    cdef create(cls, c_context *c):   
        cls = py_nfc_context()  
        cls.context = c  
        return cls

    cdef c_context* get(self): …
Run Code Online (Sandbox Code Playgroud)

c python wrapper cython

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

如何使用pip安装Openpyxl

我有Windows 10(64位).我想利用这个Openpyxl包开始学习如何与excel和其他电子表格进行交互.

我安装了Python,"windowsx86-64web-basedinstaller"我有64位操作系统,在尝试安装此版本时我错了吗?

命令提示符中的Python详细信息 Python安装选项 我在python的脚本文件夹中找到了一些pip.exes

python pip python-3.x openpyxl

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

在docker容器中安装ssh

我有一台托管Docker容器的ubuntu机器.在docker容器中我正在运行一个Web服务,它必须使用docker主机的/ etc/password验证用户的密码.

我的观点是从docker容器ssh到docker主机.所以当我在docker容器中运行命令ssh时,它的ssh未找到.所以,基本上ssh没有安装在容器中.我如何在容器中安装ssh.有没有办法完成这种情况?

unix docker dockerfile

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

exec() 在函数 python3.x 中不起作用

我正在尝试运行此代码,但似乎exec()没有执行函数内的字符串:

def abc(xyz):
    for i in fn_lst:
        s = 'temp=' + i + '(xyz)'
        exec(s)
        print (temp)

abc('avdfbafadnf')
Run Code Online (Sandbox Code Playgroud)

我收到的错误:

NameError                                 Traceback (most recent call last)
<ipython-input-23-099995c31c78> in <module>()
----> 1 abc('avdfbafadnf')

<ipython-input-21-80dc547cb34f> in abc(xyz)
      4         s = 'temp=' + i + '(word)'
      5         exec(s)
----> 6         print (temp)

NameError: name 'temp' is not defined
Run Code Online (Sandbox Code Playgroud)

fn_lst 是一个函数名称列表,即: ['has_at', 'has_num' ...]

exec()如果可能,请让我知道在这种情况下的替代方案。

python exec python-3.x

9
推荐指数
3
解决办法
4545
查看次数

为什么f-strings在它们引用的变量发生变化时不会改变?

在最近的Python 3.6版本中使用新的f字符串时,我注意到以下内容:

  1. 我们创建一个foo值为的变量bar:

    >>> foo = 'bar'
    
    Run Code Online (Sandbox Code Playgroud)
  2. 然后,我们声明一个新变量,它是我们的f-string,它应该foo被格式化:

    >>> baz = f'Hanging on in {foo}'
    
    Run Code Online (Sandbox Code Playgroud)
  3. 好的,一切正常,然后我们打电话baz来检查它的价值:

    >>> baz
    'Hanging on in bar'
    
    Run Code Online (Sandbox Code Playgroud)
  4. 让我们尝试更改值foobaz再次调用:

    >>> foo = 'spam'
    >>> baz
    'Hanging on in bar'
    
    Run Code Online (Sandbox Code Playgroud)

它不应该是动态的吗?为什么会这样?我认为如果foo改变了值,f-string会更新,但是这没有发生.我不明白这是如何工作的.

python python-3.x python-3.6 f-string

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

为Python 3.6元类提供__classcell__示例

根据3.6.0文档:

CPython实现细节:在CPython 3.6及更高版本中,__class__ 单元作为__classcell__类命名空间中的条目传递给元类.如果存在,则必须将其传播到type.__new__ 调用,以便正确初始化类.如果不这样做,将导致DeprecationWarningPython 3.6和a RuntimeWarning.

有人可以提供正确执行此操作的示例吗?

实际需要它的一个例子?

python metaclass class python-3.x python-3.6

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

哪一个更安全?uuid,binascii.hexlify(os.urandom())或random.SystemRandom()?

我想创建独特<client-key><client-secret>对谁登记自己的服务用户.

所以,我正在寻找相同的并提出这些选项:

这是一个愚蠢的问题,但我想知道哪个实现使用起来更安全(有正确的解释)?为什么?使用它比其他人有什么好处?

注意:

AFAIK,random.SystemRandom()用途os.urandom(x).所以比较主要是uuidrandom.SystemRandom().

这是我到目前为止所尝试的:

1)

import random
temp = random.SystemRandom()
random_seq = ''.join(temp.choice(CHARACTER_SET) for x in range(x))
>>> 'wkdnP3EWxtEQWnB5XhqgNOr5RKL533vO7A40hsin'
Run Code Online (Sandbox Code Playgroud)

2)

import uuid
str(uuid.uuid4())
>>> 'f26155d6-fa3d-4206-8e48-afe15f26048b'
Run Code Online (Sandbox Code Playgroud)

我不确定解决方案.所以,任何帮助将不胜感激.


PS 如果Python 2.x和3.x都有任何解决方案,那就太棒了.

python random sequence python-2.7 python-3.x

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

如何在宏派生中将字符串连接到 ident?

我需要创建一个宏派生,其中名称是函数名称的一部分。(这段代码不起作用,只是为了说明问题)

fn impl_logic(ast: &syn::DeriveInput) -> TokenStream {
    let name:&syn::Ident = &ast.ident;

    let gen = quote! {
       pub fn #name_logic() -> Arc<Mutex<UiAplicacion>> {
           ...
       }
    };

    gen.into()
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

rust rust-macros

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