命名规则

变量

变量名只能是数字、字母或下划线的任意组合

变量名的第一个字符不能是数字

不能使用关键字作为变量名

变量的定义要具有可描述性

变量名不宜过长、不宜使用中文、拼音

常量(常用在配置文件中)

程序运行过程中不会改变的量,即常量。全部字母大写(约定俗成)。

书写形式

驼峰体(类名)

下划线方式(函数名)

引号的使用

单引号和双引号用法作用相同,只是在同行代码中有较多引号时需要单引双引交叉使用,以此来方便让解释器和程序员区分所作用域。

格式化输出

%s就是代表字符串占位符,除此之外,还有%d,是数字占位符,想要输出百分号时加双重百分号即可

  1. info='''
  2.  
  3. 字符串1:%s
  4.  
  5. 整型2:%d
  6.  
  7. 字符串3:%s
  8.  
  9. '''%('',2,'')
  10.  
  11. 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逆序取余

正负相除

  1. >>> 10%-3
  2.  
  3. -2
  4.  
  5. >>> -10%3
  6.  
  7. 2
  8.  
  9. 先取最近的两个商,然后用第一个数减去这两个数的积
  10.  
  11. 10-(-3*-4)
  12.  
  13. -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中间,必须传参,不传报错)

更改全局变量

  1. name = "zhao"
  2.  
  3. def change_name():
  4.  
  5. global name #声明一个全局变量
  6.  
  7. name = "zhaoruofei"
  8.  
  9. print("after change", name)
  10.  
  11. change_name()
  12.  
  13. print("当前name", name)

匿名函数

常与其他函数连用

  1. res = map(lambda x:x**2,[1,2,3,4])
  2.  
  3. for i in res:
  4.  
  5. print(i)

递归函数

l  函数内部调用自身

l  整个函数体有明确的结束条件

l  递归层次越深,应问题规模越少

l  官方默认层次,官方说明1000,实际998/997

闭包

闭包原理

嵌套函数中,内层函数调用外层函数的非全局变量就是闭包。

闭包作用

被引用的变量被称为自由变量,不会随着函数的结束而消失,保证数据安全。

闭包应用

装饰器

装饰器

简易装饰器模板

  1. def wrapper(func):
  2.  
  3. def inner(*args,**kwargs):
  4.  
  5. print('主代码前添加的功能')
  6.  
  7. ret=func(*args,**kwargs)
  8.  
  9. print('主代码后添加的功能')
  10.  
  11. return ret
  12.  
  13. return inner
  14.  
  15. @wrapper
  16.  
  17. def func():
  18.  
  19. print('主代码')

利用装饰器完成的登录认证

  1. def wrapper(func):
  2.  
  3. def inner(*args, **kwargs):
  4.  
  5. username = input('请输入用户名:')
  6.  
  7. password = input('请输入密码:')
  8.  
  9. ret = func(username, password)
  10.  
  11. if ret == '':
  12.  
  13. print('登录成功')
  14.  
  15. else:
  16.  
  17. print('登录失败')
  18.  
  19. return ret
  20.  
  21. return inner
  22.  
  23. @wrapper
  24.  
  25. def func(username, password):
  26.  
  27. if username == 'zhaoruofei' and password == '':
  28.  
  29. return ''
  30.  
  31. else:
  32.  
  33. return ''
  34.  
  35. func()

装饰器的执行流程

wrapper(func)

内置函数

https://www.runoob.com/python3/python3-built-in-functions.html

面向对象

单例模式

概念

某个进程在生命周期内某类只存在一个实例对象,使用场景例如logger,配置模块,数据库连接池等,单实例可以减少资源使用,保证唯一性。

实现单例模式的方式

  1. 给类添加装饰器
  2. 导入模块

根据python解释器当import一个py文件时都会把该文件编码为pyc流,当再次import就直接读取pyc文件,除非py文件内容有所更改才会再次编码的原理,将要单例的类封装入一个py文件中,使用时导入即可。达到单例效果。

  1. new的方式

使用__new__这个魔术方法主要是在类初始化时进行控制。魔术方法可以理解为python代码和解释器的一种规约,python类在实例化时首先调用__new__去创建一个对象再__init__去初始化这个new出来的对象,所以__new__这个方法必须返回一个对象。当类中没有显式定义__new__方法时会调用父类中的__new__方法。所以要实现单例可以显式定义__new__方法。

  1. 元类重写元类的__call__方法

类修饰器和函数修饰器都是同个功能:帮被修饰的对象打个包装再返回该对象,所以实现单实例也比较好理解

内置方法

https://www.cnblogs.com/1oo88/p/10596675.html

__init__ : 构造函数,在生成对象时调用

__del__ : 析构函数,释放对象时使用

__repr__ : 打印,转换

__setitem__ : 按照索引赋值

__getitem__: 按照索引获取值

__len__: 获得长度

__cmp__: 比较运算

__call__: 函数调用

__add__: 加运算

__sub__: 减运算

__mul__: 乘运算

__truediv__: 除运算

__mod__: 求余运算

__pow__: 乘方

Python3使用过程中需要注意的点的更多相关文章

  1. centos7安装Python3的过程中会和Python2.7版本冲突导致yum版本比对应,致使yum不能使用的问题。

    centos7安装Python3的过程中会和Python2.7版本冲突导致yum版本比对应,致使yum不能使用的问题. 原因:yum调用Python,启动程/usr/bin/yum就是一个python ...

  2. 记录python2.7迁移到python3.6过程中的一些代码差异

    python2.7 python 3.6 import urllib2 import urllib import urlparse import urllib import exceptions 废弃 ...

  3. linux系统中离线安装python3.7过程记录

    最近公司新弄来一台linux  redhat 4.4.7服务器,准备在上面离线安装python3.7,安装过程中出现一些问题,特此记录下来. 首先在python官网上下载了 Python-3.7.3. ...

  4. 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- ...

  5. caffe安装过程中遇到的问题以及解决方法

    1. 在安装依赖库的时候,遇到: @gxjun-Latitude-E5440:~$ sudo apt-get install libatlas-base-dev 正在读取软件包列表... 完成 正在分 ...

  6. Python中if __name__=="__main__" 语句在调用多进程Process过程中的作用分析

    2018年2月27日 于创B515 引言 最近准备学习一下如何使用Python中的多进程.在翻看相关书籍.网上资料时发现所有代码都含有if __name__=="__main__" ...

  7. 安装python caffe过程中遇到的一些问题以及对应的解决方案

    关于系统环境: Ubuntu 16.04 LTS cuda 8.0 cudnn 6.5 Anaconda3 编译pycaffe之前需要配置文件Makefile.config ## Refer to h ...

  8. 做rl_abs过程中遇到的问题

    问题一 运行 train_abstractor.py就出现这个问题 nohup: ignoring input start training with the following hyper-para ...

  9. Ubuntu配置ORB-SLAM2过程中的问题

    https://www.imooc.com/article/details/id/29136 1. 提示“CMAKE_CXX_COMPILER-NOTFOUND ” 具体形式: Check for w ...

随机推荐

  1. 将数组对象转换成DataSet

    public static DataSet ObjectArrayToDataSet(object[] objArr) { if (objArr.Length == 0) return null; D ...

  2. Kernal Panic - Not syncing : VFS: unable to mount root fs on unknown-block

    升级了一下centos6.5 执行了 yum -y update reboot 出现了以下问题: Kernal Panic - Not syncing : VFS: unable to mount r ...

  3. 数据分析1:安装tushare安装包

    1. 2. 3.重点内容

  4. php输入流简单小例子

    <form method="post" action="index.php/home/index/captchaTest"> <input n ...

  5. EL表达式简单总结

    EL表达式 ## EL表达式的取值范围 JSP的四个作用域: pagecontext(生命周期用户离开或者跳转页面,作用域范围这个页面) request(生命周期用户离开页面,作用于这个页面) ses ...

  6. 手写call,bind,apply

    //实现call var that = this ; //小程序环境 function mySymbol(obj){ let unique = (Math.random() + new Date(). ...

  7. Android7.0 添加快速设定Quick Settings Tile

    Android7.0新推出了一个非常实用的功能--添加快速设定(或者翻译成快速设置),但是感觉社区里关注的人比较少,可能目前为止国内还没有Android7.0的手机,但是越早接触越好,甚至可以告诉产品 ...

  8. React Native自定义导航栏

    之前我们学习了可触摸组件和页面导航的使用的使用: 从零学React Native之09可触摸组件 - 从零学React Native之03页面导航 - 经过之前的学习, 我们可以完成一个自定义导航栏了 ...

  9. WebForms UnobtrusiveValidationMode 需要“jquery”ScriptResourceMapping 的解决方法

    问题描述:VS2012使用验证控件出现“ WebForms UnobtrusiveValidationMode 需要“jquery”ScriptResourceMapping.请添加一个名为 jque ...

  10. 网络编程--多线程 , socketserver

    内容补充 python2与python3的区别? """ python3对unicode字符的原生支持 Python2中使用ASCII码作为默认编码方式导致string有 ...