小编iba*_*ond的帖子

*(单星)和/(斜线)作为独立参数有什么作用?

在下面的函数定义中,*/代表什么?

def func(self, param1, param2, /, param3, *, param4, param5):
     print(param1, param2, param3, param4, param5)
Run Code Online (Sandbox Code Playgroud)

注意:不要误认为 *args | 中的单|双星号 **kwargs(在这里解决

python function parameter-passing function-parameter python-3.x

47
推荐指数
2
解决办法
3551
查看次数

= (equal) 在表达式大括号内的 f 字符串中做什么?

众所周知,{} 在 Python f-strings 中的用法是执行代码段并以string格式给出结果(一些教程在这里)。但是,表达式末尾的“ = ”是什么意思?

log_file = open("log_aug_19.txt", "w") 
console_error = '...stuff...'           # the real code generates it with regex
log_file.write(f'{console_error=}')
Run Code Online (Sandbox Code Playgroud)

python string python-3.x f-string python-3.8

19
推荐指数
3
解决办法
4562
查看次数

性能比较静态类型 Python 3.6+ 与 Cython

最近 Python 3.6 添加了静态类型作为强制执行某些类型的一种方式。我曾经从 Cython 获得相同的功能,与普通 Python 相比,它获得了高度优化的功能。

我的问题是:在使用新的 Python 静态类型时,我们是否也会获得显着的性能提升?每种方法的优缺点?

python static-typing cython

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

Popen 的上下文管理器

我对 Python 非常陌生。我在上下文管理器上尝试了一个解决方案,如下所示: 问题陈述: 定义一个接受系统命令的函数 run_process,在后台运行命令并返回结果

我试过的解决方案:

def run_process:
    with subprocess.Popen(cmd_args) as proc:
        proc.communicate()

if __name__ == "__main__":
    f = open(os.environ['OUTPUT_PATH'], 'w')

    cmd_args_cnt = 0
    cmd_args_cnt = int(input())
    cmd_args_i = 0
    cmd_args = []
    while cmd_args_i < cmd_args_cnt:
        try:
            cmd_args_item = str(input())
        except:
            cmd_args_item = None
        cmd_args.append(cmd_args_item)
        cmd_args_i += 1

    res = run_process(cmd_args);

    if 'with' in inspect.getsource(run_process):
        f.write("'with' used in 'run_process' function definition.\n")

    if 'Popen' in inspect.getsource(run_process):
        f.write("'Popen' used in 'run_process' function definition.\n")
        f.write('Process Output : %s\n' % (res.decode("utf-8")))

    f.close() …
Run Code Online (Sandbox Code Playgroud)

python-3.x

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

具有长参数的函数的 Python 类型注释样式

使用长类型注释来设置函数定义样式的规范(基于某些 PEP)方法是什么?

我可以想到的一些替代方案:

  • 选项1:
def my_long_function_name_super_important(
   first_long_argument_to_my_function: Union[int, str],
   second: Dict[int, str],
   third_arg: int = 0 ) -> (bool, int):
   
   return (True, 1)
Run Code Online (Sandbox Code Playgroud)
  • 选项2:
def my_long_function_name_super_important(
   first_long_argument_to_my_function: Union[int, str],
   second: Dict[int, str],
   third_arg: int = 0
) -> (bool, int):
   
   return (True, 1)
Run Code Online (Sandbox Code Playgroud)
  • 选项 3:
def my_long_function_name_super_important(
   first_long_argument_to_my_function: Union[int, str],
   second: Dict[int, str],  third_arg: int = 0
) -> (bool, int):
   
   return (True, 1)
Run Code Online (Sandbox Code Playgroud)
  • 选项 4:
def my_long_function_name_super_important(
   first_long_argument_to_my_function: Union[int, str],
   second: Dict[int, str],
   third_arg: int = 0,
   ) -> …
Run Code Online (Sandbox Code Playgroud)

python type-hinting pep python-3.x python-3.8

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

Python 打包:pyproject.toml 中的构建需求 VS setup_requires

在有些复杂的 Pythonsetup.py配置中,通常需要已经存在的其他库才能执行setuptools.setup. 就我而言,这将是setuptools>=45.0cython>=0.29。现在,我有两个选项来声明这些构建时要求(不要与通常在文件中找到的标准包安装要求混淆requirements.txt),以便将此项目发送到 PyPI:

  1. 手动将要求写入参数setup.pysetup_requires
#setup.py
from setuptools import setup
#...
setup(
    name='bla',
    #...
    setup_requires = ['setuptools>=45.0', 'cython>=0.29'],
)
Run Code Online (Sandbox Code Playgroud)
  1. 将这些要求写入PEP518pyproject.toml之后的单独文件中:
#pyproject.toml
[build-system]
# Minimum requirements for the build system to execute.
requires = ["setuptools>=45.0", "cython>=0.29"]
Run Code Online (Sandbox Code Playgroud)

它们可以互换吗?应该使用哪一个,为什么?

python setuptools pypi python-3.x pyproject.toml

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