没有在函数定义中为位置参数指定实际名称

时间:2019-08-05 14:30:20

标签: python python-3.x

单参数函数可以这样写出来:

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))

谢谢您的帮助:)

3 个答案:

答案 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/