# python函数定义-->在Python函数定义中是什么意思？

>>> def kinetic_energy(m:"in KG", v:"in M/S")->"Joules":

... return 1/2*m*v**2

...

>>> kinetic_energy.__annotations__

{"return": "Joules", "v": "in M/S", "m": "in KG"}

>>> "{:,} {}".format(kinetic_energy(20,3000),

kinetic_energy.__annotations__["return"])

"90,000,000.0 Joules"

>>> rd={"type":float,"units":"Joules","docstring":"Given mass and velocity returns kinetic energy in Joules"}

>>> def f()->rd:

... pass

>>> f.__annotations__["return"]["type"]

>>> f.__annotations__["return"]["units"]

"Joules"

>>> f.__annotations__["return"]["docstring"]

"Given mass and velocity returns kinetic energy in Joules"

def validate(func, locals):

for var, test in func.__annotations__.items():

value = locals[var]

try:

pr=test.__name__+": "+test.__docstring__

except AttributeError:

pr=test.__name__

msg = "{}=={}; Test: {}".format(var, value, pr)

assert test(value), msg

def between(lo, hi):

def _between(x):

return lo <= x <= hi

_between.__docstring__="must be between {} and {}".format(lo,hi)

return _between

def f(x: between(3,10), y:lambda _y: isinstance(_y,int)):

validate(f, locals())

print(x,y)

>>> f(2,2)

AssertionError: x==2; Test: _between: must be between 3 and 10

>>> f(3,2.1)

AssertionError: y==2.1; Test:

2020-02-19

08-22 2万+
07-19 12万+
07-28 994
08-12 4462
02-25 98
08-15 2397
05-21 5261
08-24
03-26 9027
01-02 6533
04-01 1328
12-28
09-18 4914