当前位置: 首页 > 编程日记 > 正文

python参数类型限定_python限定方法参数类型、返回值类型、变量类型等|python3教程|python入门|python教程...

https://www.xin3721.com/eschool/python.html

typing模块的作用

自python3.5开始,PEP484为python引入了类型注解(type hints)

类型检查,防止运行时出现参数和返回值类型、变量类型不符合。

作为开发文档附加说明,方便使用者调用时传入和返回参数类型。

该模块加入后并不会影响程序的运行,不会报正式的错误,只有提醒pycharm目前支持typing检查,参数类型错误会黄色提示

常用类型

int,long,float: 整型,长整形,浮点型

bool,str: 布尔型,字符串类型

List, Tuple, Dict, Set:列表,元组,字典, 集合

Iterable,Iterator:可迭代类型,迭代器类型

Generator:生成器类型

基本类型指定

示例

def test(a:int, b:str) -> str:

print(a, b)

return 1000

if __name__ == '__main__':

test('test', 'abc')

函数test,a:int 指定了输入参数a为int类型,b:str b为str类型,-> str 返回值为srt类型。

可以看到,在方法中,我们最终返回了一个int,此时pycharm就会有警告;

当我们在调用这个方法时,参数a我们输入的是字符串,此时也会有警告;

但非常重要的一点是,pycharm只是提出了警告,但实际上运行是不会报错,毕竟python的本质还是动态语言

复杂的类型标注

示例1

from typing import List

Vector = List[float]

def scale(scalar: float, vector: Vector) -> Vector:

return [scalar * num for num in vector]

# typechecks; a list of floats qualifies as a Vector.

new_vector = scale(2.0, [1.0, -4.2, 5.4])

示例2

from typing import Dict, Tuple, Sequence

ConnectionOptions = Dict[str, str]

Address = Tuple[str, int]

Server = Tuple[Address, ConnectionOptions]

def broadcast_message(message: str, servers: Sequence[Server]) -> None:

...

# The static type checker will treat the previous type signature as

# being exactly equivalent to this one.

def broadcast_message(

message: str,

servers: Sequence[Tuple[Tuple[str, int], Dict[str, str]]]) -> None:

...

):

...

这里需要注意,元组这个类型是比较特殊的,因为它是不可变的。

所以,当我们指定Tuple[str, str]时,就只能传入长度为2,并且元组中的所有元素都是str类型

泛型指定

示例

from typing import Sequence, TypeVar, Union

T = TypeVar('T') # Declare type variable

def first(l: Sequence[T]) -> T: # Generic function

return l[0]

T = TypeVar('T') # Can be anything

A = TypeVar('A', str, bytes) # Must be str or bytes

A = Union[str, None] # Must be str or None

创建变量时的类型指定

from typing import NamedTuple

class Employee(NamedTuple):

name: str

id: int = 3

employee = Employee('Guido')

assert employee.id == 3

不足之处

示例

from typing import List

def test(b: List[int]) -> str:

print(b)

return 'test'

if __name__ == '__main__':

test([1, 'a'])

从这个例子可以看出来,虽然我们指定了List[int]即由int组成的列表,但是,实际中,只要这个列表中存在nt(其他的可以为任何类型),就不会出现警告

相关文章:

CentOS VMware 配置IP小结 静态 配置 桥接 NAT

系统启动后可先ping下外网或局域网内其它机器。如果配置虚拟机时选择的NAT上网方式,后面需要配置固定IP,请先参见VMware NAT方式下设置静态IP获得可用的IP范围和网关等信息。先将ifcfg-eth0备份到home目录下,不要放在与它同一目录下&#xff…

区块链简史:解读这场技术革命的前世今生

链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 真格基金徐小平的一个“内部讲话”被泄露,揭开了创投圈对区块链的新一轮热衷。 在这份微信群的“内部讲话”中,徐小平把区块…

IncDec Sequence(codevs 2098)

题目描述 Description 给定一个长度为n的数列{a1,a2...an},每次可以选择一个区间[l,r],使这个区间内的数都加一或者都减一。  问至少需要多少次操作才能使数列中的所有数都一样,并求出在保证最少次数的前提下,最终得到的数列有多少种。 输入描述 Input…

C++ 中set

set特点: 所有元素不会重复,重复插入已经有的新值无效;所有元素按顺序排列;unordered_set除外键和值相同,所以set中的值是不可更改的set的各成员函数列表如下: 1.begin()--返回指向第一个元素的迭代器 // 如果当前容器…

python自动排课表_【python-leetcode210-拓扑排序】课程表Ⅱ

现在你总共有 n 门课需要选,记为 0 到 n-1。在选修某些课程之前需要一些先修课程。 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们: [0,1]给定课程总量以及它们的先决条件,返回你为了学完所有课…

简单粗暴告诉你什么是区块链

链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 区块链是什么?它是如何工作的? 比特币已经成为现代互联网的潮流 - 随之而来的是区块链。人们说区块链技术将导致互联网运作…

【Codeforces】Round #375 (Div. 2)

Position:http://codeforces.com/contest/723 我的情况 啊哈哈,这次raiting肯定要涨,接受过上次的教训,先用小号送肉,大号都是一发切,重回蓝咯 结果。。。 FST!! 不,这次是skip&…

python的matplotlib背景线_python中matplotlib的颜色及线条 控制

https://www.cnblogs.com/darkknightzh/p/6117528.htmlhttps://blog.csdn.net/qq_34337272/article/details/795555441.设置栅格(1)使用pyplot api命令打开栅格:plt.grid(true)设置栅格格式:plt.grid(colorr, linestyle--, linewidth1,alpha0.3)(2)使用axes类面向对…

系统权限设计思路

权限系统通常包括如下基本元素:用户、角色、权限、资源、操作。 角色分类:总经理、部长、员工。(在实际中一个用户可能存在多个角色,这就要考虑到权限累加处理) 权限分类:如”员工考勤权限”、”审核权限”…

“区块链”究竟是什么

链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 什么是区块链? 说到区块链,就不得不说比特币。 2008年底,比特币之父中本聪发表了一个关于他研究的电子现金…

leetcode 179. 最大数

给定一组非负整数,重新排列它们的顺序使之组成一个最大的整数。 示例 1: 输入: [10,2] 输出: 210 示例 2: 输入: [3,30,34,5,9] 输出: 9534330 说明: 输出结果可能非常大,所以你需要返回一个字符串而不是整数。 自己写了很久的比较函数,时钟有…

cf-Sasha and Array

题目链接 http://codeforces.com/problemset/problem/719/E 解题思路 矩阵上的线段树。 因为矩阵有分配律&#xff08;AB&#xff09;C AC BC&#xff0c;所以计算总和时直接把增量矩阵乘上去就行了。用矩阵快速幂。 fib的计算尽量拉到主函数计算。 代码 #include<stdio.h…

实对称矩阵的性质_浅谈矩阵的相似对角化(一)

森屿瑾年&#xff1a;浅谈线性变换和矩阵之间的关系​zhuanlan.zhihu.com通过前面的讨论&#xff0c;我们引出了线性变换在不同基下的矩阵之间的关系&#xff0c;知道了线性变换在不同基下的矩阵是相似的&#xff0c;进而我们可以通过选取不同的基&#xff0c;使得线性变换在这…

区块链技术未来可能用于哪些方面?

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 当世界上从100比特币购买25美分的比萨饼&#xff0c;到一比特币兑换4800人民币的天价&#xff0c;在这风起云涌的纪念&#xff0c;我们见证了一个…

tomcat启动

tomcat的启动一般是从startup.bat/startup.sh开始&#xff0c;然后启动catalina.bat/catalina.sh&#xff0c;然后启动bootstrap.jar包 那么它们启动的时候都做了哪些事情呢&#xff1f; 首先是startup.bat&#xff0c;startup.bat做了什么&#xff1f; 第二是catalina.bat&…

ERROR: from PIL import Image ImportError: No module named PIL

ERROR&#xff1a; from PIL import Image ImportError: No module named PIL 到 http://www.pythonware.com/products/pil/ 下载相关支持的版本 我的是python2.7 直接打开&#xff0c;然后一路按“下一步”&#xff0c;就行 转载于:https://www.cnblogs.com/jakejian/p/8992…

python中font_Python ColorFont包_程序模块 - PyPI - Python中文网

控制台打印彩色字体0 黑色 8 灰色1 蓝色 9 淡蓝色2 绿色 A 淡绿色3 浅绿色 B 淡浅绿色4 红色 C 淡红色5 紫色 D 淡紫色6 黄色 E 淡黄色7 白色 F 亮白色格式&#xff1a;0x12高位代表背景色&#xff0c;低位代表字体颜色0x10 | 0x020x10代表背景色&#xff0c;0…

区块链技术到底有啥用?

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 前言&#xff1a;关于区块链适合做什么和不适合做什么&#xff1f;一直都有争议。那么&#xff0c;通过什么方式来辨别呢&#xff1f;本文用详细的…

博客作业04--树

一.学习总结(2分) 1.1树结构思维导图 1.2 树结构学习体会 树的前中后序递归操作的访问路径都如下图 树的层次遍历的路径则如下图 操作{ 进队第一个节点&#xff0c; while(队不空&#xff09; { 访问该节点&#xff0c; if(BT->lchild&#xff01;NULL&#xff09;进队。 if…

oracle数据如何获取游标中动态字段_如何实现报表数据的动态层次钻取(二)

上一篇《如何实现报表数据的动态层次钻取&#xff08;一&#xff09;》介绍了利用复杂 sql 实现动态层次结构的方法&#xff0c;但该方法依赖 Oracle 的递归语法&#xff0c;在其他类型的数据库中难以实现。要想通用地实现此类报表&#xff0c;可以使用下面介绍的“集算脚本 本…

使用jsonp跨域请求后可以获得数据,但是进入error方法,返回parseerror

$.ajax({ url:url, dataType:jsonp, jsonp: callback,//回调函数名字 jsonpCallback: success_jsonpCallback,//可以不写&#xff0c;也可以自定义&#xff0c;用来取代 jQuery 自动生成的随机函数名&#xff0c;不写将由jq自动生成&#xff0c;每次生成的结果都不…

EOS技术学习笔记

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 EOS.IO软件引入了一种新的块链架构&#xff0c;旨在实现分布式应用的性能扩展。这是通过创建一个可以构建应用程序的类似操作系统的架构来实现的。…

PHP的一种缓存方案静态化

1,解决的问题。 2.如何实现。 面对大流量网站频繁访问数据库的一种优化&#xff0c;比如博客网站。不可能每个人查看都访问一次数据库。为了解决大量不必要访问的问题。 可以把第一次的内容保存为html页面。再以后定义的过期时间内都访问该静态页面。 以下是一个小的demo index…

python获取机器唯一标识_开发中常用工具 - 获取设备的唯一标识、UDID、UUID、keychain保存UUID、判断网络...

UDID全名&#xff1a;Unique Device Identifie(设备唯一标识符)说明&#xff1a;UDID&#xff0c;即设备唯一标识符&#xff0c;这是除序列号之外每台iOS设备的独一无二的号码。UDID只是和设备相关的&#xff0c;是用来区分每一个唯一的iOS设备(包括iPhone、iPad等)&#xff0c…

区块链安全入门笔记

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 虽然有着越来越多的人参与到区块链的行业之中&#xff0c;然而由于很多人之前并没有接触过区块链&#xff0c;也没有相关的安全知识&#xff0c;安…

PHP程序员的技术成长规划

PHP程序员的技术成长规划 作者&#xff1a;黑夜路人&#xff08;2014/10/15&#xff09; 按照了解的很多PHP/LNMP程序员的发展轨迹&#xff0c;结合个人经验体会&#xff0c;抽象出很多程序员对未来的迷漫&#xff0c;特别对技术学习的盲目和慌乱&#xff0c;简单梳理了这个每个…

【资源共享】RK3288 WiFiBT 开发配置参考说明

本文档主要介绍RK3288平台的WiFi&BT配置说明。 下载地址&#xff1a;http://dev.t-firefly.com/thread-13642-1-1.html更多开发资料请到社区精华系列“资源共享”专栏下载http://dev.t-firefly.com/forum-263-1.html转载于:https://www.cnblogs.com/TeeFirefly/p/9001757.h…

软件工程实训有必要吗_人工智能专业值得读吗?就业如何?

要说这几年的风口&#xff0c;人工智能首当其冲。热门是否代表了好就业&#xff1f;我觉得不是&#xff1b;那是不是就不好就业&#xff1f;我觉得也不是。先来看看这些耸人听闻的标题吧——“人工智能人才缺口超过500万&#xff0c;补齐人才短板乃是当务之急“人工智能就业前景…

区块链共识算法:PoS即权益证明 DPoS委托授权的权益证明

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 随着比特币价格暴涨&#xff0c;基于比特币的区块链技术引起各方关注&#xff0c;其核心就是共识算法。随着区块链技术的发展共识算法也在不断创新与…

【洛谷P1697】货车运输

首先&#xff0c;对于所有从x能到达y的路径中&#xff0c;限重越大越好 因此我们用Kruskal最大生成树得到一片森林&#xff08;不一定都联通&#xff09; 之后dfs维护森林的深度和LCA的预处理limit[x][0]&#xff08;x向上跳2^i步的边权最小值&#xff09; 对于每个询问&…