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

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

作者头像
云深无际
发布于 2021-07-23 04:19:16
发布于 2021-07-23 04:19:16
1.1K00
代码可运行
举报
文章被收录于专栏:云深之无迹云深之无迹
运行总次数:0
代码可运行

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

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
a:str ="aa"
b:int = 1
def example(a:str) -> str:
    return f"Hello {a}"
print(example("World"))

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 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
代码运行次数:0
运行
AI代码解释
复制
from typing import Any
def add(a):
    return a-1
def add(a:Any)->Any:
    return a-1
    

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

里面的一

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from typing import NoReturn
def show()->NoReturn:
    print("Test NoReturn")

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

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

更加泛化的list类型

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

字典

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from typing import Tuple
info:Tuple[str,int,float]=("张",13,12.0)

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var:List[List[int]]=[[1,2],[2,3]]
print(var)

可以给List进行嵌套

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

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

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

->是返回值的注解类型

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

也可以看到我们的注解

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{'x': <class 'int'>, 'y': <class 'int'>, 'return': <class 'int'>}

结果是这样的

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

看我注释写的啥

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

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

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

各种参数的顺序

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def guess(x):
    if x>3:
        return ">3"
    else:
        return"<=3"

guess(3)
# 一次只能执行一个return语句
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
week04_python函数、参数及参数
        由若干语句组成的语句块、函数名称、参数列表构成,它是组织代码的最小单元;
py3study
2020/01/14
5440
Python 函数 —— 定义,参数,参
    数学定义:y = f(x), y是x的函数,x是自变量。 y = f(x0,x1,x2,...,xn)
py3study
2020/01/10
1.2K0
从入门到实践,Python Type Hints
《流畅的 Python》一书中提到,如果一门语言很少隐式转换类型,说明它是强类型语言,例如 Java、C++ 和 Python 就是强类型语言。
冬冬i
2022/04/09
8620
从入门到实践,Python Type Hints
python类型注解
    __annotations__属性是一个字典,其中包括返回值类型的声明。假设要做位置参数的判断,无法和字典中的声明对应。使用inspect模块
py3study
2020/01/10
7590
使用类型注解让 Python 代码更易读
我们知道 Python 是一种动态语言,在声明一个变量时我们不需要显式地声明它的类型,例如下面的例子:
崔庆才
2019/08/06
2.1K0
Python基础之函数参数与返回值进阶
参数作用:如果外界希望在函数内部处理数据,就可以将数据作为参数传入函数内部; 返回值作用:如果希望一个函数函数执行完成后,向外界报告函数的执行结果,就可以使用函数的返回值。
py3study
2020/01/16
1.3K0
python函数基础-参数-返回值-注释-01
函数就是有特定功能的工具 # python中有内置函数(python解释器预先封装好的)与自定义函数(用户自定义封装的)之分
suwanbin
2019/09/26
1.8K0
python函数基础-参数-返回值-注释-01
Python--参数注解
         首先,难发现,由于不做任何类型检查,直到运行期问题菜显现出来,或线上运行时才发现问题;
py3study
2020/01/09
5670
Python函数参数之全面讲解
Python函数参数 Python函数参数 本文主要介绍Python的函数参数,各种形式的参数。建议动手试试,可以加深理解。 函数参数 定义函数的时候,我们把参数的名字和位置确定下来,函数的接口定义就完成了。对于函数的调用者来说,只需要知道如何传递正确的参数,以及函数将返回什么样的值就够了,函数内部的复杂的逻辑被封装起来,调用者无需了解。 Python的函数定义非常简单,但灵活度却非常大。除了正常定义的必选参数外,还可以使用默认参数、可变参数和关键字参数,使得函数定义出来的接口,不但能处理复杂的参数,还可以
1846122963
2018/03/09
1.3K0
Python第四课----函数
2、调用 函数定义,只是声明,不会执行,需要调用 加上小括号调用 调用时写的参数是实际参数,是传入的值,简称实参
py3study
2020/01/14
5140
Python 函数引入
由若干语句组成的语句块,函数名称,参数列表构成,它是组织代码的最小单元,完成一定功能。
江小白
2019/06/08
9090
python 学习第二周总复习
如果l2是l1的拷贝对象,则l1内部的任何数据类型的元素变化,则l2内部的元素也会跟着改变,因为可变类型值变id不变
py3study
2020/01/15
4070
2018-7-18pythoh中函数的参数,返回值,变量,和递归
************************************************************************************                                  函数中的参数的初级和返回值: 技术文档中[]方括号里面的东西表示可选的 参数:函数运行需要的数据   如果没有参数会提示:missing 1 required positional,
武军超
2018/09/27
2.1K0
Python类型注解
函数定义似乎变得复杂些了:多出来这些 str 、 -> 都是什么意思?有什么作用?
chuchur
2023/03/31
5640
Python类型注解
Python入门-函数
此处的函数区别于我们数学上的函数,在编程世界中,函数(Functions)是指可重复使用的程序片段。它们允许你为某个代码块赋予名字,允许你 通过这一特殊的名字在你的程序任何地方来运行代码块,并可重复任何次数。这就是所谓的调用函数。我们已经使用过了许多内置的函数,例如 len 和 range 。
py3study
2020/01/03
4810
初学python,调用固定参,不固定参
函数调用时的参数传递方式:(调用函数) 传递方式有以下四种: 位置传参 序列传参 关键字传参 字典关键字传参 ---------------------------------------------------yu---
py3study
2020/01/03
1.7K0
Python类型注解
有句话说的好,“动态一时爽,重构火葬场”。因此,python在3.5版本的时候引入了类型注解,以方便静态类型检查工具,IDE等第三方工具。例如,在vscode中只要你安装了python相关的插件之后,当你在编写如下的代码的时候,是没有任何提示的。
zy010101
2022/05/05
6660
周末学习笔记——day02(带参装饰器,
一,复习 ''' 1.函数的参数:实参与形参 形参:定义函数()中出现的参数 实参:调用函数()中出现的参数 形参拿到实参的值,如果整体赋值(自己改变存放值的地址),实参不会改变,(可变类型)如果修改内部内容,实参会跟着变化 位置实参 - 只能对位置形参赋值 关键字实参 - 可以对所有(不包含可变长位置形参)形参赋值 位置形参 - 必须出现在最前,且必须传值 默认形参 - 出现在位置形参后*前,可以不用传参 可变长位置形参
py3study
2020/01/17
3760
python干货——函数
👨‍🎓作者:Java学术趴 🏦仓库:Github、Gitee ✏️博客:CSDN、掘金、InfoQ、云+社区 💌公众号:Java学术趴 🚫特别声明:原创不易,未经授权不得转载或抄袭,如需转载可联系小编授权。 🙏版权声明:文章里的部分文字或者图片来自于互联网以及百度百科,如有侵权请尽快联系小编。 👋大家好!我是你们的老朋友Java学术趴。任何的语言都离不开函数,都包括内置函数和自定义函数,函数的作用就是对功能进行封装以便于无效调用。 9.1 函数的基础 函数就是一段含有特殊功能的代码块 使用函数完成
Java学术趴
2022/06/03
7180
python干货——函数
Python函数的参数列表
形参:形参是在创建过程中声明的参数,如果不给形参传入特定的实参,形参就没有实际的意义
Python学习者
2022/11/23
9270
相关推荐
week04_python函数、参数及参数
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验