前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python 注解+参数+返回值小结

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

作者头像
云深无际
发布2021-07-23 12:19:16
1K0
发布2021-07-23 12:19:16
举报
文章被收录于专栏:云深之无迹云深之无迹

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

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

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

代码语言:javascript
复制
a:str ="aa"
b:int = 1
def example(a:str) -> str:
    return f"Hello {a}"
print(example("World"))

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

代码语言:javascript
复制
# Callable
from typing import Callable,NoReturn
def show(msg:str)->NoReturn:
    print(msg)
def get_msg(msg:str,func:Callable[[str],NoReturn])->NoReturn:
    # 需要将参数类型和返回值的类型都注解出来
    func(msg)

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

代码语言:javascript
复制
from typing import Any
def add(a):
    return a-1
def add(a:Any)->Any:
    return a-1
    

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

里面的一

代码语言:javascript
复制
from typing import NoReturn
def show()->NoReturn:
    print("Test NoReturn")

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

代码语言:javascript
复制
from typing import Sequence
# 更加泛化,不区分是list或tupe
msga:Sequence[str]=["我","爱","你"]

更加泛化的list类型

代码语言:javascript
复制
from typing import Dict,Mapping
d:dict[str,int]={}
# 注解返回类型
m:Mapping[str,int]={}
# 注解参数

字典

代码语言:javascript
复制
from typing import Tuple
info:Tuple[str,int,float]=("张",13,12.0)

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

代码语言:javascript
复制
var:List[List[int]]=[[1,2],[2,3]]
print(var)

可以给List进行嵌套

代码语言:javascript
复制
name:List[str]=[1,'物品','说呢哦']
print(name)
代码语言:javascript
复制
from typing import List
l:List[int]=[1,2,3]
# 全部由整数构成的列表

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

代码语言:javascript
复制
a:int=123
b:str='hello'
# 变量类型的注解
代码语言:javascript
复制
def add(x:int,y:int)->int:
    return x+y
add(1,2)

->是返回值的注解类型

代码语言:javascript
复制
print(add.__annotations__)
# 这个属性里面有我编写的注解

也可以看到我们的注解

代码语言:javascript
复制
{'x': <class 'int'>, 'y': <class 'int'>, 'return': <class 'int'>}

结果是这样的

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

看我注释写的啥

代码语言:javascript
复制
# 字典形参,字典形参前面是两个**,这个形参指向一个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)

字典的解包

代码语言:javascript
复制
# 解封参数列表
def add(x,y):
    return x+y
print(add(3,5))
代码语言:javascript
复制
8
代码语言:javascript
复制
# 还是上面的函数,能不能直接将求和的两个数放在一个tuple或者list里面,然后传给add呢
ab=[3,5]
print(add(ab))
代码语言:javascript
复制
# 上面是错误的
print(add(ab[0],ab[1]))
代码语言:javascript
复制
# 更简单的怎么写,解封实参列表
print(add(*ab))
代码语言:javascript
复制
# 如果参数在一个字典里面,用**分离
def f(name,score=0.0):
    print('the name: ',name)
    print('the score: ',score)

d = {
    "name":"li ping",
    "score":"60.5"
}

f(**d)
代码语言:javascript
复制
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')
代码语言:javascript
复制
def fn(*args,x):
    # keyword-only参数
    print(x)
    print(args)
代码语言:javascript
复制
fn(3,4,x=7)
代码语言:javascript
复制
def fn(x,y,z=3,*arg,m=4,n,**kwargs):
    print(x,y,z,m,n)
    print(args)
    print(kwargs)

各种参数的顺序

代码语言:javascript
复制
def guess(x):
    if x>3:
        return ">3"
    else:
        return"<=3"

guess(3)
# 一次只能执行一个return语句
代码语言:javascript
复制
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)

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-07-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云深之无迹 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档