标签: typing

如何在Python中键入检查变量?

我有一个Python函数,它接受一个必须是整数的数字参数,以使其行为正确.在Python中验证这个的首选方法是什么?

我的第一反应是做这样的事情:

def isInteger(n):
    return int(n) == n
Run Code Online (Sandbox Code Playgroud)

但我不禁想到这是1)昂贵的2)丑陋和3)受到机器epsilon的温柔怜悯.

Python是否提供任何本地的类型检查变量方法?或者这被认为是违反语言的动态类型设计?

编辑:因为有很多人问过 - 有问题的应用程序使用IPv4前缀,从平面文本文件中获取数据.如果任何输入被解析为浮点数,则该记录应被视为格式错误并被忽略.

python typing dynamic-typing

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

使用List/Tuple/etc.从输入vs直接引用类型为list/tuple/etc.

什么是使用的差异List,Tuple等等.从typing模块:

from typing import Tuple

def f(points: Tuple):
    return map(do_stuff, points)
Run Code Online (Sandbox Code Playgroud)

而不是直接引用Python的类型:

def f(points: tuple):
    return map(do_stuff, points)
Run Code Online (Sandbox Code Playgroud)

我何时应该使用另一个?

python typing type-hinting python-3.5

30
推荐指数
3
解决办法
8059
查看次数

自动关闭Emacs中的大括号?

我见过一个Vim的插件,名为AutoClose(从这篇文章中发现),在输入'(','{'等时会自动添加右括号.

例如; 当我键入以下内容(|是光标)时:

int main(|
Run Code Online (Sandbox Code Playgroud)

我希望)自动插入关闭:

int main(|)
Run Code Online (Sandbox Code Playgroud)

有没有人知道emacs的类似功能 - 谷歌这次失败了!

emacs typing

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

C#"是"运算符 - 是反射吗?

一位同事今天问我一个有趣的问题 - C#关键字/运算符"是否被认为是反思?

object tmp = "a string";
if(tmp is String)
{
}
Run Code Online (Sandbox Code Playgroud)

这个操作符是如何在幕后实现的?它需要反思还是内省?或者由于语言的强类型性质,对象的类型是否可以作为内存中对象的顶级属性立即访问?

MSDN声明:

请注意,is运算符仅考虑引用转换,装箱转换和拆箱转换.is运算符不考虑其他转换,例如用户定义的转换.

考虑盒装和非盒装转换的能力似乎意味着某种内省.

.net c# reflection introspection typing

29
推荐指数
2
解决办法
7146
查看次数

具有特定形状和数据类型的 Numpy 类型

目前,我正在尝试更多地使用 numpy 类型来使我的代码更清晰,但是我已经达到了目前无法覆盖的限制。

是否可以指定特定的形状以及相应的数据类型?例子:

Shape=(4,)
datatype= np.int32
Run Code Online (Sandbox Code Playgroud)

到目前为止,我的尝试如下所示(但都只是抛出错误):

第一次尝试:

import numpy as np

def foo(x: np.ndarray[(4,), np.dtype[np.int32]]):
...
result -> 'numpy._DTypeMeta' object is not subscriptable
Run Code Online (Sandbox Code Playgroud)

第二次尝试:

import numpy as np
import numpy.typing as npt

def foo(x: npt.NDArray[(4,), np.int32]):
...
result -> Too many arguments for numpy.ndarray[typing.Any, numpy.dtype[+ScalarType]]
Run Code Online (Sandbox Code Playgroud)

另外,不幸的是,我在文档中找不到有关它的任何信息,或者只有当我按照文档记录的方式实现它时才会出现错误。

numpy typing python-typing

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

Pythonic类型的提示与熊猫?

让我们采用一个简单的函数,它接受一个str并返回一个数据帧:

import pandas as pd
def csv_to_df(path):
    return pd.read_csv(path, skiprows=1, sep='\t', comment='#')
Run Code Online (Sandbox Code Playgroud)

为此函数添加类型提示的推荐pythonic方法是什么?

如果我向python询问它返回的DataFrame的类型pandas.core.frame.DataFrame.以下内容不起作用,因为它会告诉我大熊猫没有定义.

 def csv_to_df(path: str) -> pandas.core.frame.DataFrame:
     return pd.read_csv(path, skiprows=1, sep='\t', comment='#')
Run Code Online (Sandbox Code Playgroud)

python typing

28
推荐指数
5
解决办法
8827
查看次数

使用静态类型语言清理和类型安全的状态机实现?

我在Python中实现了一个简单的状态机:

import time

def a():
    print "a()"
    return b

def b():
    print "b()"
    return c

def c():
    print "c()"
    return a


if __name__ == "__main__":
    state = a
    while True:
        state = state()
        time.sleep(1)
Run Code Online (Sandbox Code Playgroud)

我想把它移植到C,因为它不够快.但是C不允许我创建一个返回相同类型函数的函数.我试过制作这种类型的功能:typedef *fn(fn)()但它不起作用,所以我不得不使用一个结构.现在代码非常难看!

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

typedef struct fn {
    struct fn (*f)(void);
} fn_t;

fn_t a(void);
fn_t b(void);
fn_t c(void);

fn_t a(void)
{
    fn_t f = {b};

    (void)printf("a()\n");

    return f;
}

fn_t b(void)
{
    fn_t f = {c};

    (void)printf("b()\n");

    return f; …
Run Code Online (Sandbox Code Playgroud)

c python language-agnostic haskell typing

25
推荐指数
5
解决办法
2606
查看次数

字符串序列的Python类型注释,但不适用于字符串?

是否有一个Python类型提示匹配列表,元组和可能的其他顺序类型,但不匹配字符串?

问题是字符串同时是长度为1的字符串序列(例如单个字符),因此它们在技术上匹配Sequence[str],但是为期望字符串列表的函数提供字符串可能是100%的错误.

有没有办法从类型注释中排除字符串,使其类似于不存在And[Sequence[str], Not[str]]

至于目的,我想注释这个功能:

PathType = Union[str, os.PathLike]
def escape_cmdline(argv: Union[List[PathType], Tuple[PathType]]) -> str: ...
Run Code Online (Sandbox Code Playgroud)

但是现有的签名看起来很臃肿,并没有涵盖列表和元组兼容的任何自定义类型.有没有更好的方法?

python typing python-3.x

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

红宝石是强力还是微弱的打字?

红宝石是强力还是微弱的打字?

据推测,Javascript也是如此.

javascript ruby typing

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

Java isInstance vs instanceOf运算符

整个泛型的东西有点像扔我一个循环,更多的RTT.

Specificis?啊,这里的要点是:

enum QueryHelper {
  query1,
  query2;
  static <T> QueryHelper getQueryHelper (Class<T> expectedReturn) {
    if (expectedReturn.isInstance (SomeRelatedClass.class))
      return query1;
    else
      return query2;
  }
}
Run Code Online (Sandbox Code Playgroud)

然后我会这样称呼它:

...
QueryHelper helper = QueryHelper.getQueryHelper(SomeRelatedClass.class);
...
Run Code Online (Sandbox Code Playgroud)

这样我就可以在实际帮助器中灵活地分配查询返回类型.它做了一些铸造和对象创建.我所看到的是,没有比赛,我应该以其他方式这样做吗?或者整个想法是不是很糟糕?

而真正的核心是我不理解class.isInstance和instanceOf运算符之间的区别?我应该使用后者吗?

java inheritance typing rtti

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