你没见过的python语法
目录:
1、不一样的列表
2、改变type中的规则,创建类:类属性大写
3、%s字串格式化,不用元组用字典
4、没有参数抛出异常
5、字符串签名加f 格式化字符串
6、attr库
1、不一样的列表
list1 = ["a", "b", "c"]
self, *args = list1
print(self)
print(args)
输出:
a
['b', 'c']
2、改变type中的规则,创建类:类属性大写
class UpperAttrMetaClass(type):
def __new__(cls, class_name, class_parents, class_attrs):
# 遍历属性字典,把不是__开头的属性名字变为大写
newAttr = {}
for k, v in class_attrs.items():
if not k.startswith("__"):
newAttr[k.upper()] = v # 方法1:通过‘type’来创建类对象
# return type(class_name, class_parents, newAttr) # 方法2:复用type.__new__方法创建类对象
# return type.__new__(cls, class_name, class_parents, newAttr) # 方法3:使用super方法创建类对象
return super(UpperAttrMetaClass, cls).__new__(cls, class_name, class_parents, newAttr) # python3的用法
class Foo(object, metaclass=UpperAttrMetaClass):
bar = "bip" # 判断Foo类中是否有某个属性
print(hasattr(Foo, 'bar'))
print(hasattr(Foo, "BAR")) f = Foo()
print(f.BAR)
输出:
False
True
bip
3、%s字串格式化,不用元组用字典
str= """
第一个:%(delim)s
第二个:%(id)s
"""
str_new = str % {'delim': "$", 'id': 9}
print(str_new)
输出:
第一个:$
第二个:9
4、没有参数抛出异常
def func1(*args, **kwargs):
if not args: # 无参数报错
raise TypeError("descriptor 'format' of 'Formatter' object needs an argument")
else:
n_args = len(args)
pattern = " ".join("%s," for x in range(n_args))
# print(pattern)
return "I am func1, my args is: " + pattern % args if __name__ == '__main__':
# 有参数正常
res1 = func1("a1", "a2", "a3")
print(res1) # 无参数报错
res2 = func1()
print(res2)
输出:
I am func1, my args is: a1, a2, a3, Traceback (most recent call last):
File "D:/aaa-py/tmp/my00-tool.py", line 17, in <module>
res2 = func1()
File "D:/aaa-py/tmp/my00-tool.py", line 3, in func1
raise TypeError("descriptor 'format' of 'Formatter' object needs an argument")
TypeError: descriptor 'format' of 'Formatter' object needs an argument
5、字符串签名加f 格式化字符串
例子:
https://blog.csdn.net/sunxb10/article/details/81036693
6、attr库
https://www.attrs.org/en/latest/glossary.html
https://blog.csdn.net/xufive/article/details/102856921
你没见过的python语法的更多相关文章
- 初试Python语法小试牛刀之冒泡排序
Python很火,心里很慌,没吃过猪肉,也要见见猪走路. 看了几天Python的语法,大概初步了解了一点点,https://www.liaoxuefeng.com/wiki/0014316089557 ...
- python语法入门之流程控制
python语法入门之流程控制 流程控制是指控制流程,具体指控制程序执行的流程. 流程控制分为三种: 1.顺序结构 程序从上而下的正常执行(正常执行的代码就是顺序结构) 2.分支结构 赋予程序人的思维 ...
- 深入理解python(一)python语法总结:基础知识和对python中对象的理解
用python也用了两年了,趁这次疫情想好好整理下. 大概想法是先对python一些知识点进行总结,之后就是根据python内核源码来对python的实现方式进行学习,不会阅读整个源码,,,但是应该会 ...
- 4、Python语法之变量
一 引入 我们学习Python语言是为了控制计算机.让计算机能够像人一样去工作,所以在Python这门语言中,所有语法存在的意义都是为了让计算机具备人的某一项技能,这句话是我们理解后续所有Python ...
- python语法元素的名称
变量 什么是变量? """ 变量是保存和表示数据值的一种语法元素,在程序中十分常见.顾名思义,变量的值是可以改变的,能够通过赋值(使用等号"=")方式 ...
- python语法:注释
Python语法:注释 python语言中的注释是来帮助程序员理解并读懂代码内容的文字.当然,注释不仅在python语言中是这个作用,在其他语言中也几乎一样. python注释的生成方式 所有演示 ...
- Python基础部分:5、 python语法之变量与常量
目录 python语法之变量与常量 一.什么是变量与常量 1.什么是变量 2.什么是常量 二.变量的基本使用 1.代码中如何记录事物状态 2.变量使用的语法结构与底层原理 3.变量名的命名规范 4.变 ...
- 对 Python 语法不够了解导致的 bug
对 Python 语法不够了解导致的 bug. `in` '20' in '11264,6144,4096,3072,2048,1024,300,30' Out[7]: True a_list = ' ...
- python 笔记2:python语法基础
python语法学习笔记: 1 输入输出 input(),print(). name = input('input your name : ')print('hello ,'+name)print(& ...
随机推荐
- git init 与 git init --bare 区别
git init 与 git init --bare 区别 发现问题 最早是在公司的wiki上发现了这个命令,google后发现值得记录下来 实践中发现的区别 网上找了很多资料,但说的很乱,干脆在自己 ...
- CentOS 6.5 安装 php7 教程 包很重要使用lnmp1.4里面的包
./configure \ --prefix=/usr/local/php-7.0.1 \ --with-mysql=mysqlnd \ --with-pdo-mysql=mysqlnd \ --wi ...
- 让浏览器下载文件http头部
网站提供下载服务时经常需要实现一个强制下载功能(即强制弹出下载对话框),并且文件名保持和用户之前上传时相同. 效果如下图: Content-Disposition 使用 HTTP Header 的 ...
- 很多人都不知道的监听微信、支付宝等移动app及浏览器的返回、后退、上一页按钮的事件方法
版权声明:本文为博主原创文章,未经博主允许不得转载. 在实际的应用中,我们常常需要实现在移动app和浏览器中点击返回.后退.上一页等按钮实现自己的关闭页面.调整到指定页面或执行一些其它操作的 需求,那 ...
- 矩阵hash + KMP - UVA 12886 The Big Painting
The Big Painting Problem's Link: http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=88791 M ...
- 选择LoadRunner Protocol的两大定律
选择LoadRunner Protocol的两大定律 确定性能测试脚本录制时使用的协议类型经常是一个容易引起误会的问题.很多刚刚接触到性能测试的同行常常会想当然地根据开发语言等来决定协议的选取,导致录 ...
- MathType二次偏导怎么表示
求导以及求偏导运算在数学中是很重要的一个部分,尤其是在高等数学中,基本都由函数的导数与偏导组成,很多公式定理也是关于这方面的,如果少了这一部分,数学将会黯然失色.因此在文档中涉及到这些内容时,必然会少 ...
- C++ STL迭代器与索引相互转换
0 前言 C++ STL提供了vector.list等模板容器,极大地方便了编程使用. “遍历”是对容器使用的最常用的操作. 使用迭代器来遍历是最好最高效的遍历方法. 当然,对于有些容器的遍历除了使用 ...
- malloc free, new delete 的异同点
相同点: 都可以动态的申请并释放内存 不同点: 1. 用法不同 <1> malloc 函数为 void* malloc(size_t size), 用于申请一块长度为 size 字节的内存 ...
- Linux GCC编译使用动态、静态链接库 (转)
原文出处:http://blog.csdn.net/a600423444/article/details/7206015 在windows下动态链接库是以.dll后缀的文件,二在Linux中,是以.s ...