Python3使用过程中需要注意的点
命名规则
变量
变量名只能是数字、字母或下划线的任意组合
变量名的第一个字符不能是数字
不能使用关键字作为变量名
变量的定义要具有可描述性
变量名不宜过长、不宜使用中文、拼音
常量(常用在配置文件中)
程序运行过程中不会改变的量,即常量。全部字母大写(约定俗成)。
书写形式
驼峰体(类名)
下划线方式(函数名)
引号的使用
单引号和双引号用法作用相同,只是在同行代码中有较多引号时需要单引双引交叉使用,以此来方便让解释器和程序员区分所作用域。
格式化输出
%s就是代表字符串占位符,除此之外,还有%d,是数字占位符,想要输出百分号时加双重百分号即可
info=''' 字符串1:%s 整型2:%d 字符串3:%s '''%('',2,'') print(info)
a=f’这是{变量名}’
终止循环体的方法区别
break
跳出break所在层循环体
quit()、exit()——不建议使用
调用系统命令,结束程序。
continue
结束本次循环,继续下一次循环,不结束循环体。
ASCII、Unicode、UTF-8、GBK 区别
python2内容进行编码(默认ASCII),而python3对内容进行编码的默认为UTF-8。
ASCII
最多只能用8位来表示(一个字节),即:2**8 = 256,所以,ASCII码最多只能表示 256 个符号。不支持中文
Unicode(万国码)
UCS -2 是使用2个字节
UCS -4 是使用4个字节
UTF-8
万国码的升级版
一个中文字符=三个字节、英文是一个字节、欧洲的是2个字节、亚洲3个字节
GBK
国标
一个中文字符=2个字节、英文是一个字节
GBK转UTF-8需通过媒介Unicode
数据类型方面
如何判断是否为可变数据类型:通过哈希。
有序:支持索引
Int
进制转换
二进制转十进制:10 1111 = 1*2**0+1*2**1+1*2**2+1*2**3+1*2**5
十进制转二进制:用十进制数除2逆序取余
正负相除
>>> 10%-3 -2 >>> -10%3 2 先取最近的两个商,然后用第一个数减去这两个数的积 10-(-3*-4) -10-(-3*-4)
str
内置方法
str.count(‘a’):返回a在str中出现的次数。
str.index(‘a’):返回a在str中的索引,且只返回一个,如果a不在str中会报出异常。
str.find(‘a’):检测str是否包含在字符串中,如果指定范围beg和end,则检查是否包含在指定范围内,如果包含返回开始的索引值,否则返回-1。
str.split(‘a’):以a分割str,如果a在str末尾,则加个空值。
str.startswith(‘a’):检测str是否以a开头。
str.strip(‘a’):去除str两端的a
str.replace(‘a’,’e’):替换str中的a为e
str.join(‘aa’):以指定字符串作为分隔符,将seq中所有的元素(的字符串表示)合并为一个新的字符串。
str.isdigit():如果字符串只包含数字则返回True否则返回False..。
str.isdecimal():判断是否是十进制。
str.isalpha():判断字母,中文。
str.isalnum():字母、数字、中文。
str.capitalize():将字符串的第一个字符转换为大写。
str.title():返回"标题化"的字符串,就是说所有单词都是以大写开始,其余字母均为小写
str.center():居中
str.format():格式化功能
list
增删操作时要注意:列表可变,每次的增删操作会改变列表长度。
list.append(obj):在列表末尾添加对象
list.insert(index,obj):在list的index索引位置添加obj
list.extend(seq):在列表末尾一次性追加另一个序列中的值
list.pop(index):如果括号内没有值,则默认删除最后一个。
list.remove(obj):删除列表中第一个obj匹配项
list.clear():清空列表
dict
字典无序可变
radiansdict.clear():删除字典内所有元素
radiansdict.copy():返回一个字典的浅复制
radiansdict.fromkeys():创建一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值
radiansdict.get(key, default=None):返回指定键的值,如果值不在字典中返回default值
key in dict:如果键在字典dict里返回true,否则返回false
radiansdict.items():以列表返回可遍历的(键, 值) 元组数组
radiansdict.keys():返回一个迭代器,可以使用 list() 来转换为列表
radiansdict.setdefault(key, default=None):和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default
radiansdict.update(dict2):把字典dict2的键/值对更新到dict里
radiansdict.values():返回一个迭代器,可以使用 list() 来转换为列表
pop(key[,default]):删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。
popitem():随机返回并删除字典中的一对键和值(一般删除末尾对)。
函数方面
函数的返回值
返回单个值时直接返回
返回多个时可以直接返回,也可用元组。
函数传参
实参角度
位置参数
关键字参数
混合参数
注:位置参数要在关键字参数前面
关键字参数与形参的名字对应
形参角度
位置参数
默认参数
动态参数
仅限关键字参数(在*args和**kwargs中间,必须传参,不传报错)
更改全局变量
name = "zhao" def change_name(): global name #声明一个全局变量 name = "zhaoruofei" print("after change", name) change_name() print("当前name", name)
匿名函数
常与其他函数连用
res = map(lambda x:x**2,[1,2,3,4]) for i in res: print(i)
递归函数
l 函数内部调用自身
l 整个函数体有明确的结束条件
l 递归层次越深,应问题规模越少
l 官方默认层次,官方说明1000,实际998/997
闭包
闭包原理
嵌套函数中,内层函数调用外层函数的非全局变量就是闭包。
闭包作用
被引用的变量被称为自由变量,不会随着函数的结束而消失,保证数据安全。
闭包应用
装饰器
装饰器
简易装饰器模板
def wrapper(func): def inner(*args,**kwargs): print('主代码前添加的功能') ret=func(*args,**kwargs) print('主代码后添加的功能') return ret return inner @wrapper def func(): print('主代码')
利用装饰器完成的登录认证
def wrapper(func): def inner(*args, **kwargs): username = input('请输入用户名:') password = input('请输入密码:') ret = func(username, password) if ret == '': print('登录成功') else: print('登录失败') return ret return inner @wrapper def func(username, password): if username == 'zhaoruofei' and password == '': return '' else: return '' func()
装饰器的执行流程
wrapper(func)
内置函数
https://www.runoob.com/python3/python3-built-in-functions.html
面向对象
单例模式
概念
某个进程在生命周期内某类只存在一个实例对象,使用场景例如logger,配置模块,数据库连接池等,单实例可以减少资源使用,保证唯一性。
实现单例模式的方式
- 给类添加装饰器
- 导入模块
根据python解释器当import一个py文件时都会把该文件编码为pyc流,当再次import就直接读取pyc文件,除非py文件内容有所更改才会再次编码的原理,将要单例的类封装入一个py文件中,使用时导入即可。达到单例效果。
- new的方式
使用__new__这个魔术方法主要是在类初始化时进行控制。魔术方法可以理解为python代码和解释器的一种规约,python类在实例化时首先调用__new__去创建一个对象再__init__去初始化这个new出来的对象,所以__new__这个方法必须返回一个对象。当类中没有显式定义__new__方法时会调用父类中的__new__方法。所以要实现单例可以显式定义__new__方法。
- 元类重写元类的__call__方法
类修饰器和函数修饰器都是同个功能:帮被修饰的对象打个包装再返回该对象,所以实现单实例也比较好理解
内置方法
https://www.cnblogs.com/1oo88/p/10596675.html
__init__ : 构造函数,在生成对象时调用
__del__ : 析构函数,释放对象时使用
__repr__ : 打印,转换
__setitem__ : 按照索引赋值
__getitem__: 按照索引获取值
__len__: 获得长度
__cmp__: 比较运算
__call__: 函数调用
__add__: 加运算
__sub__: 减运算
__mul__: 乘运算
__truediv__: 除运算
__mod__: 求余运算
__pow__: 乘方
Python3使用过程中需要注意的点的更多相关文章
- centos7安装Python3的过程中会和Python2.7版本冲突导致yum版本比对应,致使yum不能使用的问题。
centos7安装Python3的过程中会和Python2.7版本冲突导致yum版本比对应,致使yum不能使用的问题. 原因:yum调用Python,启动程/usr/bin/yum就是一个python ...
- 记录python2.7迁移到python3.6过程中的一些代码差异
python2.7 python 3.6 import urllib2 import urllib import urlparse import urllib import exceptions 废弃 ...
- linux系统中离线安装python3.7过程记录
最近公司新弄来一台linux redhat 4.4.7服务器,准备在上面离线安装python3.7,安装过程中出现一些问题,特此记录下来. 首先在python官网上下载了 Python-3.7.3. ...
- tensorfolw配置过程中遇到的一些问题及其解决过程的记录(配置SqueezeDet: Unified, Small, Low Power Fully Convolutional Neural Networks for Real-Time Object Detection for Autonomous Driving)
今天看到一篇关于检测的论文<SqueezeDet: Unified, Small, Low Power Fully Convolutional Neural Networks for Real- ...
- caffe安装过程中遇到的问题以及解决方法
1. 在安装依赖库的时候,遇到: @gxjun-Latitude-E5440:~$ sudo apt-get install libatlas-base-dev 正在读取软件包列表... 完成 正在分 ...
- Python中if __name__=="__main__" 语句在调用多进程Process过程中的作用分析
2018年2月27日 于创B515 引言 最近准备学习一下如何使用Python中的多进程.在翻看相关书籍.网上资料时发现所有代码都含有if __name__=="__main__" ...
- 安装python caffe过程中遇到的一些问题以及对应的解决方案
关于系统环境: Ubuntu 16.04 LTS cuda 8.0 cudnn 6.5 Anaconda3 编译pycaffe之前需要配置文件Makefile.config ## Refer to h ...
- 做rl_abs过程中遇到的问题
问题一 运行 train_abstractor.py就出现这个问题 nohup: ignoring input start training with the following hyper-para ...
- Ubuntu配置ORB-SLAM2过程中的问题
https://www.imooc.com/article/details/id/29136 1. 提示“CMAKE_CXX_COMPILER-NOTFOUND ” 具体形式: Check for w ...
随机推荐
- python字典排序取最值总结
dic = {"abc":18,"adc":19,"abe":20} # 默认对键排序,从小到大,返回排序后键组成的列表 zidian = ...
- Java大数类BigDecimal及八种舍入模式的介绍
BigDecimal的引入 在利用Java编程语言开发银行.金融类等需要对数值进行高精度计算的软件时,我们经常使用BigDecimal和BigInteger这两个大数据类,而不是常见的int.long ...
- PHPCMS快速建站系列之需要掌握的函数
路径:phpcms\libs\classes\model.class.php /** * 执行sql查询 * @param $where 查询条件[例`name`='$name'] * ...
- asp.net ajax客户端框架如何调用Web Service
asp.net ajax客户端框架如何调用Web Service 1:Web Service类添加 [System.Web.Script.Services.ScriptService]特性2:需要异步 ...
- 程序中提醒用户进去App Store 评分 跳转 代码
大家都知道,评论和评分是决定app在appstore中排名的重要因素,但是大部分用户下载安装APP后却不会去点评,所以添加提示用户去点评的功能是很必要的,如下是代码: 很多用户用了好软件 ...
- 【JZOJ4848】【GDOI2017模拟11.3】永恒的契约
题目描述 宅邸迅速的燃烧着,必须带贝蒂走出禁书库!凭着感觉,又一次直接找到禁书库的门. "你,是那个人嘛?"400年了,当初圣域建立结界时没有进入圣域,被伤了心的人工精灵贝蒂,与强 ...
- 页面头部<meta>中的属性和含义
1<meta name="robots" content="index, follow" /> none:搜索引擎将忽略此网页,等价于noin ...
- Kubernetes排错:用容器的元数据提供新思路
在这篇文章中,让我们讨论一下Kubernetes中的元数据(Metadata),以及如何利用它来监控系统的性能. 元数据(Metadata) 是一个较为高大上的词.它的含义是"用来描述其他数 ...
- Android中解析Json数据
在开发中常常会遇到解析json的问题 在这里总结几种解析的方式: 方式一: json数据: private String jsonData = "[{\"name\":\ ...
- iOS 9整理
WWDC 2015上那些酷酷的新内容(一) http://www.cocoachina.com/apple/20150611/12120.html