单参数函数可以这样写出来:
import datetime
def func1(mydate):
frmt = '%d-%m-%Y'
return datetime.datetime.strptime(mydate, frmt)
Python 3.5解释器也接受以下形式的相同功能:
def func2(str):
frmt = '%d-%m-%Y'
return datetime.datetime.strptime(str, frmt)
我在学习/研究为什么后者的单参数功能正常工作时遇到了麻烦。
使用诸如“使用作为实际类型关键字的参数定义函数”,“作为参数的类型函数”等短语搜索网络,不会产生任何信息。如果有人熟悉这种行为,或者可以将我引导到某个资源,我将不胜感激。这是一个可验证的示例,可以粘贴到解释器中:
import datetime
def func1(mydate):
frmt = '%d-%m-%Y'
return datetime.datetime.strptime(mydate, frmt)
def func2(str):
frmt = '%d-%m-%Y'
return datetime.datetime.strptime(str, frmt)
# test
todaysdate = "28-10-2019"
print(func1(todaysdate) == func2(todaysdate))
谢谢您的帮助:)
答案 0 :(得分:4)
Python不会阻止您“隐藏”变量名称的内置对象类型。当然不推荐。但是,您只是在创建一个名称为str
的变量。
答案 1 :(得分:1)
我将其放在答案中,而不是留下我的评论,而只是添加其他答案。您没有将类型传递给函数,而是覆盖了内置类型。尽管python允许这样做,但您不应该这样做。它将导致混乱和错误。
def func(str):
print(str)
print(str(2))
func('test')
输出:
test
Traceback (most recent call last):
File "main.py", line 4, in <module>
func('test')
File "main.py", line 3, in func
print(str(2))
TypeError: 'str' object is not callable
对:
def func(my_str):
print(my_str) # prints test
print(str(2)) # prints 2
func('test')
答案 2 :(得分:1)
import datetime
def func1(mydate):
frmt = '%d-%m-%Y'
return str(datetime.datetime.strptime(mydate, frmt))
def func2(str):
frmt = '%d-%m-%Y'
return str(datetime.datetime.strptime(str, frmt))
# test
todaysdate = "28-10-2019"
print(func1(todaysdate) == func2(todaysdate))
该程序通过覆盖str()函数为您提供错误概述。
仅请参阅python中的猴子修补概念。 https://www.geeksforgeeks.org/monkey-patching-in-python-dynamic-behavior/