python基础知识

作为非科班的python小白,有时候对于一些python的基本知识和原理还一知半解,对于之前不清楚的地方摘录在此,供后续查看。Be Pythonic!

1、effective python

1、写代码前确定python版本 

python --version

一般python2用2.7.5版本,centos7自带的就是2.7.5版本。现在开发一般用python3,两者区别比较大,建议先确认版本。

2、遵循PEP8风格

使用4个空格缩进而不是tab;

文件中的函数与类用两个空行分开;

同一个类各方法之间用一个空行隔开;

下表获取元素、函数调用或关键字参数不要在两旁添加空格;

变量赋值的时候两边添加空格;

函数、变量和属性用小写字母,中间用下划线连接;

受保护的属性以单下划线开头;

私有的实例属性以两个下划线开头;

以每个首字母大写的方式来命名类;

模块级别的常量以大写字母来拼写;

类中的实例方法,首个参数应命名为self,代表该对象自身;类方法,首个参数命名为cls,表示该类自身;

检测空值用if not xxx,不要用 if len(xxx) == 0;

import总是放在文件开头,引入模块使用绝对名称;

可以使用Pylint来检查格式错误和其他错误

3、bytes、str和Unicode

python3中,bytes是原始8位值,str包含Unicode字符

编码和解码交给外围来做,核心部分用Unicode字符。

def to_str(bytes_or_str):
    if isinstance(bytes_or_str,bytes):
        value = bytes_or_str.decode('utf-8')

在python以Unicode作为编码的基础类型,字符串类型编码得到bytes类型对象,以他编码的方式解码得到str(utf-8);

 

 

 

 

 

 

 

 

##法

+ Python 中的字符串有两种索引方式,从左往右以 0 开始,从右往左以 -1 开始

+ Python 没有单独的字符类型,一个字符就是长度为 1 的字符串

+ 函数之间或类的方法之间用空行分隔,表示一段新的代码的开始。类和函数入口之间也用一行空行分隔,以突出函数入口的开始

+ Python可以在同一行中使用多条语句,语句之间使用分号(;)分割

+ print 默认输出是换行的,如果要实现不换行需要在变量末尾加上 end=""

+ Python3 中有六个标准的数据类型:

不可变数据(四个):Number(数字)、String(字符串)、Tuple(元组)、Sets(集合);

可变数据(两个):List(列表)、Dictionary(字典)

+ type和instance查看数据类型,type()不会认为子类是一种父类类型。isinstance()会认为子类是一种父类类型。type 是用于求一个未知数据类型对象,而 isinstance 是用于判断一个对象是否是已知类型。

+ 加号 (+) 是字符串的连接符, 星号 (*) 表示复制当前字符串,紧跟的数字为复制的次数。

+ 列表中元素的类型可以不相同,它支持数字,字符串甚至可以包含列表(所谓嵌套)。

+ 数据类型的转换,你只需要将数据类型作为函数名即可。

+ 一般来说,函数的返回值一般为一个。而函数返回多个值的时候,是以元组的方式返回的。

+ 注释是#、3单引号和3双引号

+ 除了和C语言的运算符之外,还拥有成员运算符(not) in,身份运算符is(not)

+ python 中的 and 从左到右计算表达式,若所有值均为真,则返回最后一个值,若存在假,返回第一个假值;or 也是从左到有计算表达式,返回第一个为真的值;

+ is 用于判断两个变量引用对象是否为同一个, == 用于判断引用变量的值是否相等。

is not与!=区别于上述一致,一个比较的是引用对象,另一个比较的是两者的值。

+ python 没有自增运算符

 

+ python中,变量是以内容为基准而不是像 c 中以变量名为基准,所以只要你的数字内容是5,不管你起什么名字,这个变量的 ID 是相同的,同时也就说明了 python 中一个变量可以以多个名称访问。

+ 元组中只包含一个元素时,需要在元素后面添加逗号,否则括号会被当作运算符使用。因为tuple不可变,所以代码更安全。如果可能,能用tuple代替list就尽量用tuple。在定义的时候,tuple的元素就必须被确定下来。tuple的元素所保存的内容(数值或内存地址)是不允许修改的,但地址映射的对象自身是可以修改的。

+ 不允许同一个键出现两次。创建时如果同一个键被赋值两次,后一个值会被记住。键必须不可变,所以可以用数字,字符串或元组充当,而用列表就不行。字典是支持无限极嵌套的。

+ print() sep 参数使用

+ while-else

+ 使用内置 enumerate 函数进行遍历

+ 迭代是Python最强大的功能之一,是访问集合元素的一种方式。迭代器只能往前不会后退。迭代器有两个基本的方法:iter() 和 next()。

+ 在Python中,使用了yield的函数被称为生成器(generator)。跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行 next() 方法时从当前位置继续运行。调用一个生成器函数,返回的是一个迭代器对象。

+ 调用函数时可使用的正式参数类型:必需参数、关键字参数、默认参数和不定长参数,默认参数必须放在最后面

+ 匿名函数:python使用lambda来创建匿名函数,lambda [arg1 [,arg2,.....argn]]:expression

+ Python的作用域一共有4种:L(Local)局部作用域、E(Enclosing)闭包函数外的函数中、G (Global)全局作用域和B(Built-in)内建作用域。只有模块(module),类(class)以及函数(def、lambda)才会引入新的作用域。函数内可以访问全局变量,但不能更新(修改)其值,可以加上 global 引用以更新变量值。

+ 每个列表推导式都在 for 之后跟一个表达式,然后有零到多个 for 或 if 子句。返回结果是一个根据表达从其后的 for 和 if 上下文环境中生成出来的列表。如果希望表达式推导出一个元组,就必须使用括号。列表推导式的执行顺序:各语句之间是嵌套关系,左边第二个语句是最外层,依次往右进一层,左边#第一条语句是最后一层。关于嵌套列表解析,从左到右的for语句顺序对应的是从外到里的层次关系。

+ 每个模块都有一个__name__属性,当其值是'__main__'时,表明该模块自身在运行,否则是被引入。如果包定义文件 __init__.py 存在一个叫做 __all__ 的列表变量,那么在使用 from package import * 的时候就把这个列表中的所有名字作为包内容导入。

+ 可以使用 str.format() 函数来格式化输出值。str(): 函数返回一个用户易读的表达形式,repr(): 产生一个解释器易读的表达形式。

+ python的pickle模块实现了基本的数据序列和反序列化。

+ try...except raise finally

+ self代表的是类的实例,代表当前对象的地址,而 self.class 则指向类。

+ 支持多继承、专有方法和运算符重载,__private_attrs:两个下划线开头,声明该属性为私有,不能在类地外部被使用或直接访问。

+ python cgi编程,与c cgi类似,只要webserver支持cgi调用即可,.py处理文件等同main.cgi

+ PyMySQL是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb。PyMySQL 遵循 Python 数据库 API v2.0 规范,并包含了 pure-Python MySQL 客户端库。

+ 多线程编程:每个线程都有他自己的一组CPU寄存器,称为线程的上下文,该上下文反映了线程上次运行该线程的CPU寄存器的状态。指令指针和堆栈指针寄存器是线程上下文中两个最重要的寄存器,线程总是在进程得到上下文中运行的,这些地址都用于标志拥有线程的进程地址空间中的内存。Python3 线程中常用的两个模块为:_thread、threading(推荐使用)。Python中使用线程有两种方式:函数或者用类来包装线程对象。除了使用方法外,线程模块同样提供了Thread类( threading.Thread)来处理线程。

+ python有三种方法解析XML,SAX,DOM,以及ElementTree

+ Python3 中可以使用 json 模块来对 JSON 数据进行编解码

+ 可选参数默认值的设置在Python中只会被执行一次。
 

##释疑

1、python中,每个py文件被称之为模块,每个具有__init__.py文件的目录被称为包。只要模块或者包所在的目录在sys.path中,就可以使用import模块或import 包来使用。如果你要使用的模块(py文件)和当前模块在同一目录,只要import相应的文件名就好,比如在a.py中使用b.py: import b ;

但是如果要import一个不同目录的文件(例如b.py)该怎么做呢? 首先需要使用sys.path.append方法将b.py所在目录加入到搜素目录中。然后进行import即可,例如 import sys ;sys.path.append('c:\xxxx') # 这个例子针对 windows 用户来说的,因为windows环境有转义字符,所以最好写成sys.path.append('c:\\xxxx') 。

一般在sublime里运行没有问题,但是在命令行里运行出现“xxx模块”找不到时就可以用上面这种方法,在使用到xxx模块的文件里用sys.path.append添加 xxx模块所在的路径即可解决此问题。

 

##python3.x相比于python2.x的变化

+ python3.x源码文件默认使用utf-8编码

+ 去除了<>,全部改用!=

+ 去除``,全部改用repr()

+ 关键词加入as 和with,还有True,False,None

+ 整型除法返回浮点数,要得到整型结果,请使用//

+ 去除print语句,加入print()函数实现相同的功能。同样的还有 exec语句,已经改为exec()函数

+ 改变了顺序操作符的行为,例如x<y,当x和y类型不匹配时抛出TypeError而不是返回随即的 bool值

+ 输入函数改变了,删除了raw_input,用input代替

+ 去除了long类型,现在只有一种整型——int,但它的行为就像2.X版本的long

+ 移除了cPickle模块,可以使用pickle模块代替。最终我们将会有一个透明高效的模块

+ Python 3.0在设计的时候没有考虑向下兼容

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值