Python 注解+参数+返回值小结

这篇文章偏记录类型,不是写的很细。我先说一下什么是注解,就是参数类型的显化操作,而且会给Python赋予一些静态语言的特性。

User = strAge = int Answer = str # 其实这个习惯好,写一个明白的注解def say_hello(u:User)->Answer: return f"Hello {u}"print(say_hello("Ha"))

首先,我们可以提前吧这个注解的名字改掉,这样更加人性化

a:str ="aa"b:int = 1def example(a:str) -> str: return f"Hello {a}"print(example("World"))

也可以提前吧参数写在外面,提前注解一下

# Callablefrom typing import Callable,NoReturndef show(msg:str)->NoReturn: print(msg)def get_msg(msg:str,func:Callable[[str],NoReturn])->NoReturn: # 需要将参数类型和返回值的类型都注解出来 func(msg)

也可以给回调的函数去赋予注解

from typing import Anydef add(a): return a-1def add(a:Any)->Any: return a-1

Any是一种,始祖类型?就反正好像是道生一,一生三,三生万物

里面的一

from typing import NoReturndef show()->NoReturn: print("Test NoReturn")

当我们的返回值啥也没有的时候,写这个

from typing import Sequence# 更加泛化,不区分是list或tupemsga:Sequence[str]=["我","爱","你"]

更加泛化的list类型

from typing import Dict,Mappingd:dict[str,int]={}# 注解返回类型m:Mapping[str,int]={}# 注解参数

字典

from typing import Tupleinfo:Tuple[str,int,float]=("张",13,12.0)

元组,这几个说道很多,用到我再说

var:List[List[int]]=[[1,2],[2,3]]print(var)

可以给List进行嵌套

name:List[str]=[1,'物品','说呢哦']print(name)
from typing import Listl:List[int]=[1,2,3]# 全部由整数构成的列表

也可以调用typing的强大能力,提前写好参数列表

a:int=123b:str='hello'# 变量类型的注解
def add(x:int,y:int)->int: return x+yadd(1,2)

->是返回值的注解类型

print(add.__annotations__)# 这个属性里面有我编写的注解

也可以看到我们的注解

{'x': <class 'int'>, 'y': <class 'int'>, 'return': <class 'int'>}

结果是这样的

# 如果函数的形参中既有默认形参又有可变形参,则默认形参位于可变形参后面def data(*args, sep="/"): return sep.join(args)print(data("2018","07","25"))# 给你args可变形参传递了三个实参data("2018","07","25",seq="/")# 函数定义中的可变形参最多只能有一个,不能有两个可变形参,否则就会不知道是哪个实参传给了哪个形参

看我注释写的啥

# 字典形参,字典形参前面是两个**,这个形参指向一个dict对象,调用函数的时候必须以"key=value"的形式传递可变数量的形参,这些实参被组装成一个dict对象,并赋值给字典形参# 字典形参必须位于可变形参的后面def f(x,*y,**z): print("X: ",x) # 访问任意形参中的参数 for e in y: print(e) print() # 访问字典形参中的参数 for key in z: print(key,":",z[key])f("hello","li ping",60.5,year="2018",month=7,day=25)

字典的解包

# 解封参数列表def add(x,y): return x+yprint(add(3,5))
8
# 还是上面的函数,能不能直接将求和的两个数放在一个tuple或者list里面,然后传给add呢ab=[3,5]print(add(ab))
# 上面是错误的print(add(ab[0],ab[1]))
# 更简单的怎么写,解封实参列表print(add(*ab))
# 如果参数在一个字典里面,用**分离def f(name,score=0.0): print('the name: ',name) print('the score: ',score)
d = { "name":"li ping", "score":"60.5"}
f(**d)
def showconfig(**kwargs): # 实参名和值组成一个字典 for k,v in kwargs.items(): print('{} = {}'.format(k,v))showconfig(host='127.0.0.1',port='80',username='zzg',password='1234')
def fn(*args,x): # keyword-only参数 print(x) print(args)
fn(3,4,x=7)
def fn(x,y,z=3,*arg,m=4,n,**kwargs): print(x,y,z,m,n) print(args) print(kwargs)

各种参数的顺序

def guess(x): if x>3: return ">3" else: return"<=3"
guess(3)# 一次只能执行一个return语句
def fn(x): for i in range(x): if i>3: return 1 # 条件结构来控制return语句 else: print("{} is not greater than 3".format(x))

后面是两个返回值的知识,一个函数的只能有一个return结果,而且可以使用分支语句来控制,还有就是如果没有return语句,其实还是会返回一个return(None)

(0)

相关推荐