命名规则

变量

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

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

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

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

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

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

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

书写形式

驼峰体(类名)

下划线方式(函数名)

引号的使用

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

格式化输出

%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,配置模块,数据库连接池等,单实例可以减少资源使用,保证唯一性。

实现单例模式的方式

  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. hdu4180 数论

    一个分数假如 3/5=1/(1+2/3)=1/(1+1/(1+1/2)); 当分子出现1的时候,只要让分母减一. #include <stdio.h> #include <stdli ...

  2. FinalShell for Mac

    Mac一键安装脚本 curl -o finalshell_install.sh www.hostbuf.com/downloads/finalshell_install.sh;chmod +x fin ...

  3. TIJ——Chapter Nine:Interfaces

    A class containing abstract methods is called an abstract class. If a class Contains one of more abs ...

  4. Effective C++: 05实现

    26:尽可能延后变量定义式的出现时间 1:只要你定义了一个变量而其类型带有一个构造函数或析构函数,那么当程序的控制流到达这个变量定义式时,你便得承受构造成本:当这个变量离开其作用域时,你便得承受析构成 ...

  5. 运行docker容器镜像

    docker容器可以理解为在盒中运行的进程. 这个盒包含了该进程运行所必须的资源,包括文件系统.系统类库.shell 环境等等. 但这个盒默认是不会运行任何程序的. 1.运行镜像之前,可以先查看本地有 ...

  6. select筛选用户数据

  7. git push的时候每次都要输入用户名和密码的问题解决

    换了个ssh key,发现每次git push origin master的时候都要输入用户名和密码 原因是在添加远程库的时候使用了https的方式..所以每次都要用https的方式push到远程库 ...

  8. laravel 博客项目部署到Linux系统后报错 权限都设置为777,仍然报错没有权限

    阿里工程师最后给出解决方案.

  9. BUAA 169 电话费

    http://oj55.bianchengla.com/problem/169/ 还有这个,不怎么好做,最后用栈做出来了. 感觉比较有用的一个数据是: 10 3 1010101010 代码如下: #i ...

  10. 利用mock生成随机的东西

    Mock.mock({ "list|100": [ { 'id|+1': 1,//id排列 'color': '@color()',//随机颜色 'date': '@datetim ...