我有一个Python函数,它接受一个必须是整数的数字参数,以使其行为正确.在Python中验证这个的首选方法是什么?
我的第一反应是做这样的事情:
def isInteger(n):
return int(n) == n
Run Code Online (Sandbox Code Playgroud)
但我不禁想到这是1)昂贵的2)丑陋和3)受到机器epsilon的温柔怜悯.
Python是否提供任何本地的类型检查变量方法?或者这被认为是违反语言的动态类型设计?
编辑:因为有很多人问过 - 有问题的应用程序使用IPv4前缀,从平面文本文件中获取数据.如果任何输入被解析为浮点数,则该记录应被视为格式错误并被忽略.
什么是使用的差异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)
我何时应该使用另一个?
我见过一个Vim的插件,名为AutoClose(从这篇文章中发现),在输入'(','{'等时会自动添加右括号.
例如; 当我键入以下内容(|是光标)时:
int main(|
Run Code Online (Sandbox Code Playgroud)
我希望)自动插入关闭:
int main(|)
Run Code Online (Sandbox Code Playgroud)
有没有人知道emacs的类似功能 - 谷歌这次失败了!
一位同事今天问我一个有趣的问题 - C#关键字/运算符"是否被认为是反思?
object tmp = "a string";
if(tmp is String)
{
}
Run Code Online (Sandbox Code Playgroud)
这个操作符是如何在幕后实现的?它需要反思还是内省?或者由于语言的强类型性质,对象的类型是否可以作为内存中对象的顶级属性立即访问?
MSDN声明:
请注意,is运算符仅考虑引用转换,装箱转换和拆箱转换.is运算符不考虑其他转换,例如用户定义的转换.
考虑盒装和非盒装转换的能力似乎意味着某种内省.
目前,我正在尝试更多地使用 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)
另外,不幸的是,我在文档中找不到有关它的任何信息,或者只有当我按照文档记录的方式实现它时才会出现错误。
让我们采用一个简单的函数,它接受一个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中实现了一个简单的状态机:
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) 是否有一个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)
但是现有的签名看起来很臃肿,并没有涵盖列表和元组兼容的任何自定义类型.有没有更好的方法?
整个泛型的东西有点像扔我一个循环,更多的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运算符之间的区别?我应该使用后者吗?
typing ×10
python ×5
.net ×1
c ×1
c# ×1
emacs ×1
haskell ×1
inheritance ×1
java ×1
javascript ×1
numpy ×1
python-3.5 ×1
python-3.x ×1
reflection ×1
rtti ×1
ruby ×1
type-hinting ×1