相关疑难解决方法(0)

为什么Python没有静态变量?

有一个问题询问如何在python中模拟静态变量.

此外,在Web上可以找到许多不同的解决方案来创建静态变量.(虽然我还没有看到我喜欢的那个.)

为什么Python不支持方法中的静态变量?这被认为是unpythonic还是与Python的语法有关?

编辑:

我特意询问了设计决策的原因,但我没有提供任何代码示例,因为我想避免解释来模拟静态变量.

python

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

普通功能中的"自我"?

我有一堆函数(在任何类之外),我在其上设置了属性,比如funcname.fields = 'xxx'.我希望我可以从函数内部访问这些变量self.fields,但当然它告诉我:

全局名称'self'未定义

那么......我该怎么办?我可以访问一些神奇的变量吗?喜欢__this__.fields


有几个人问过"为什么?".您可能不同意我的推理,但我有一组函数,所有函数都必须共享相同的签名(只接受一个参数).在大多数情况下,这一个参数足以进行所需的计算.但是,在一些有限的情况下,需要一些额外的信息.我决定只在功能上设置它们,以便很容易被忽略,而不是强迫每个函数接受一长串未使用的变量.

虽然,现在我发现**kwargs如果你不关心额外的args ,你可以使用它作为最后一个参数.那好吧...

编辑:实际上,我没有写的一些功能,宁愿不修改接受额外的args.通过"传入"额外的args作为属性,我的代码可以使用我的自定义函数,利用额外的args,以及不需要额外args的第三方代码.

谢谢你的快速答案:)

python

7
推荐指数
2
解决办法
2265
查看次数

python:函数中的变量,点前面是函数名

我需要理解这个概念,其中我们可以在函数定义中的变量名中使用点 (.)。这里没有类定义,也没有模块,Python 不应该接受包含点的变量名。

def f(x):
    f.author = 'sunder'
    f.language = 'Python'
    print(x,f.author,f.language)

f(5)
`>>> 5 sunder Python`
Run Code Online (Sandbox Code Playgroud)

请解释这是如何可能的,并建议相关文档以供进一步探索。

function python-3.x

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

如何为函数本身设置repr?

__repr__用于返回对象的字符串表示,但在 Python 中,函数也是对象本身,并且可以具有属性

如何设置__repr__函数的?

在这里看到可以为函数外部的函数设置一个属性,但通常__repr__在对象定义本身内设置一个属性,所以我想在函数定义本身内设置 repr。


我的用例是,我正在使用Tenacity重试具有指数退避功能的网络函数,并且我想记录我最后调用的函数的(信息性)名称。

retry_mysql_exception_types = (InterfaceError, OperationalError, TimeoutError, ConnectionResetError)


def return_last_retry_outcome(retry_state):
    """return the result of the last call attempt"""
    return retry_state.outcome.result()


def my_before_sleep(retry_state):
    print("Retrying {}: attempt {} ended with: {}\n".format(retry_state.fn, retry_state.attempt_number, retry_state.outcome))


@tenacity.retry(wait=tenacity.wait_random_exponential(multiplier=1, max=1200),
                stop=tenacity.stop_after_attempt(30),
                retry=tenacity.retry_if_exception_type(retry_mysql_exception_types),
                retry_error_callback=return_last_retry_outcome,
                before_sleep=my_before_sleep)
def connect_with_retries(my_database_config):
    connection = mysql.connector.connect(**my_database_config)
    return connection
Run Code Online (Sandbox Code Playgroud)

目前retry_state.fn显示<function <lambda> at 0x1100f6ee0>类似于@chepner 所说的内容,但我想向其中添加更多信息。

python repr

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

标签 统计

python ×3

function ×1

python-3.x ×1

repr ×1