运行shell文件: bash sh csh +文件名
运行pyhon文件:python +文件名
交互模式:〉〉〉
交互模式下比起文本模式,会有如下特点:
1文本前面不能有空格,否则会报错
2复合语句中第二行开始提示符会变成“。。。”
3用一个空行便是符合语句结束
#!/usr/bin/env python
标示符:有字母、数字、下划线组成,但不能以数字开头。
“”''
#注释
运行shell文件: bash sh csh +文件名
运行pyhon文件:python +文件名
交互模式:〉〉〉
交互模式下比起文本模式,会有如下特点:
1文本前面不能有空格,否则会报错
2复合语句中第二行开始提示符会变成“。。。”
3用一个空行便是符合语句结束
#!/usr/bin/env python
标示符:有字母、数字、下划线组成,但不能以数字开头。
“”''
#注释
Python的类型与运算-数字(二)
运算符应用
类型升级
导入分数模块:from fractions import Fraction
整数等级最低
只能应用于整数的运算符:位运算符,逻辑运算符,身份运算符。
基本数学函数
数学函数的应用
• bin,oct,hex
这些函数是需要转换进制的时候使用从10进制转化为其他进制
• float把整数转化为浮点数
• int这个是从别的进制的文本转化为Python里的数值时使用,也支持浮点数转化为整数,是把小数部分扔掉。
• pow:幂函数,功能与运算符**一样。
• sqrt:取当前数的平方根
• max:最大值与min:最小值
• abs与fabs:取绝对值。同样是取绝对值,但是fabs函数取出来的是浮点数,abs可以保持原有的数字类型。
• Decimal模块:在使用浮点数的时候,因为计算机里是使用二进制来表示,所以会出现精度问题,当金融行业等不许出现一丝问题的时候,我们会使用Decimal模块来解决精度问题。
• 格式化输出-format:使用bin(),oct(),hex()的时候会发现前面会加0b,0o,0x。我们不想要前缀的时候可以
使用format函数来解决。
cmp:在Python 2.x里提供了很好的比较函数: cmp(),当前面的数值小,结果是-1;一样的时候结果为0,前面的数值大的时候结果为1。但是Python 3.x里很可惜舍弃了这个函数。
random:在Python 里提供了很好的随机函数使用的模块。
• modf:此函数是把浮点数的整数位和小数位单独取出来。
• log:此函数为指数函数。默认e为底数,结果为浮点数。log10以10为底数。可以自定义底数。
建议学习2.7版本
优点:语法简洁,高可读性,开发效率高,可移植,支持自行开发或第三方模块,可调用c和c++库,可与java组建集成
缺点:速度不快(脚本)
使用场景:系统编程,用户图形接口,internet脚本,数据库编程,快速原型,数值计算和科学计算编程,游戏、图像、人工智能、XML、机器人等
python2为了正常使用中文,可以在脚本的开头加上语句:#-*-encoding=utf8-*-来所有的字符串方式都转换为utf8的方式.
len():用来看字符串的长度。
在用for语句时,要记得缩进,不然会报错(前面加上先执行语句:from __future__ import print_function)。
string[a:b:c]表示提取从a开始到b的字符串。(最后一个参数可有可无,表示每c个字符显示一个)。
ord():把一个字符串转换位数字。
chr():把单个数字转换为字符。
open(r"file_address", access_mode)打开
py2默认二进制打开
py3默认unicode方式打开
r :读 rb :二进制读
w :重写 wb : 二进制重写
a :追加 ab :二进制追加
flush close()刷新文件操作
file.read()读取文件file
file.tell() 获取 读取文件后指针的位置
file.readline() 按行读取
file.readlines() 按行读取,返回list,每行就是元素
file.seek(x,0/1/2) 偏移指针读取
file.write("sddf") 写入file
file.write( list ) 写入列表
读取压缩文件:
import gzip
import bz2
gzip.open("file_address",'wt')
bz2.open('file_address','wt')
py2
bz2.BZ2File('file_address','w')
集合
无序,不可重复的
py2 set(list)
py3 _set()
list2
list1 = list2 引用
list1 = list2[ : ] 复制
对象的比较 : is
list1 is list2 表示同一个对象的引用,即true
list1 == list2 比较两个列表的值
无限循环:
l = ['l'];
l.append('l')
l[1][1][1]
分数模块导入:from fractions import Fraction
位运算符只能用于整数('&,|,^,<<,>>')
pow幂函数 sqrt平方根
math导入:import math
取绝对值:abs ,fabs(取出的绝对值为一个浮点类型)
random随机数函数
Python的类型与运算-动态类型简介
变量、对象、引用、共享引用。
变量:在Python里,不像别的一些语言,需要声明变量类型。因为在Python里变量没有类型。
变量是存放指针的,因此变量没有类型。
对象是存放数据的,所以对象有类型之说。
对象回收:因为对象是独立于变量的,当不再使用的时候是得回收的。
在Python里两个变量可以共享一个对象,这个叫做共享引用。
== 表示测试两个值是否相等。
is 表示两个值是否是同一对象。
在Python里多个变量引用同一整数,字符串的时候,会引用同一对象。但是其他时候,在Python里给两个变量赋予同样值的对象,其对象不是共用的。
需要了解一个对象被引用多少次,可以使用如下函数来查看:
import sys
sys.getrefcount(1)
序列赋值:
a = 1
b = 2
b,a = a,b
a,b 值互换
a ,*b ,c = 1, 2, 3, 5,4
a =1 b = [2,3,5] c = 4
a = b = c = "myvalues"
a is b b is c : true
36位1-9,a-z
//留整数,3//6结果为0
<>不等于
先对a的补码取反再显示它的补码
1 is 1完全相同才真
list.insert(2,'')
.pop(2)
del list[0]
del list[1:]删除切片
list2=sorted(list)会生成一个新的列表
sorted([x.lower() for x in list],reverse=True)
info=['name',18,[1997,9,7]]
_name,_age,_birth=info
可以这样赋值
也可以
_name,_age,(_birth_y,_birth_m,_birth_d)=info
_开头防止和系统变量重名
py3 *_a可以存放后面多个,形成一个列表
这多个变量中只有一个可以带*
from collections import deque
q=deque(maxlen=5)
可以设置最长长度
再加会将第一个除掉
.appendleft(1)会除掉最右的应为设置了maxlen
min(l)
max()
from heapq import nlargest,nsmallest
nlargest(3,list)可以着最大3个
sum(list)可以算总值
为切片命名
_slice1=slice(1,3)slice是一个函数
from collections import Counter
计算重复数
counter_list=Counter(list)
会形成一个元组列举出每个元素的重复数
counter_list.most_common(2)
会列举出最多的两个
可以用counter_list.update(['a','a','b'])来更新
from fractions import Fraction
import Fraction不行
导入后才能用
整<fraction<浮点<complex
移位只能用于整数
1 and 2 ->2第二个数字
0 and 2 ->0
0 or 3 ->3非零的
3 or 2 ->第一个数字
在cmd中打powershell可以进入ps
float(Fraction(4,5)) is 08 是false
type(float(Fraction(4,5))
x<y>z x<y and y<z有false不继续
int(1.9)=1
import math
from math import *
abs(-10)=10
math.fabs(-10)=10.0
round四舍五入
3是靠近偶数四舍五入
math.ceil(1.5)=2
random.random()从0到1之间取
random.choise((1,2)) or ([])
random.sample((1,2),个数)
结果为列表
random.shuffle洗牌
()元组,[]列表,打乱只能用列表
n位二进制随机数
random.getrandbits(个数n)
math.modf(2.5)分离
用Decimal更准确地进行浮点数运算
format除去输出的进制头
元祖不能在原处更改
实参,形参
list 改变函数的可变对象参数的值 也许会对调用者有影响
不可变对象“传值”:数值、字符串
可变对象“指针”:列表、字典
isinstance(i,list) i是list类型 true
isinstance是Python中的一个内建函数。是用来判断一个对象的变量类型
lambda a:a*a
传递a,返回a*a
funclist = [lambda x : x**2,
lambda x : x**3,
lambda x : x**4 ]
funclist[0](3)
>>>9 调用第一个,计算结果
funclist[1](3)
>>>29 调用第二个,计算结果
Python的语句与语法-语句简介
• Python的语句
• Python的语句格式
• Python的缩进
• 对用户输入数据的判断
• 处理错误
在Python里是不使用{}或者别的符号来限制语句的开始和结尾的。
一个语句的开始(除了复合语句),就是开头,换行就是结束。
在开头,不能随意增加空格。
关于严格控制,在复合语句里也是同样的。当你使用缩进时,必须一致。
复合语句,有单行写法和多行写法。从冒号后面就是复合语句的开始。
单行:复合语句里只有一行时,可使用单行写法。
但是,复合语句所包涵的语句不是单行时,需要使用对其的缩进来表示复合语句。
在Python里,复合语句是使用严格的缩进对齐来表示同一层次。
缩进可使用1个以上的空格或者制表符(tab),具体数量没有严格限制,但必须对齐。
当我们所写的语句有bug,会出现一些错误,程序会中断运行。但我们在这个时候,不想让程序冲断但还是需要提示错误的时候可以使用try。
Python的函数-函数基础
• 函数简介
• 函数相关的语句和表达式
• 编写函数
• def语句
• Python函数中的多态
• 本地变量
函数是将一些语句集合在一起的部件,它们能够不止一次地在程序中运行。函数还能计算出一个返回值,并能够改变作为函数输入的参数,而这些参数在代码运行时也许没次都不相同。
总结使用函数的意义:
最大化代码重用和最小化代码冗余。
流程的分解。
函数相关语句和表达式:
calls:调用函数
def:定义函数
编写函数
def是可执行的代码。在Python里,只有def执行之后,才会生成相应的函数。要是def没有执行,相应的函数就不会生成。def语句在if、while语句甚至是其它def语句里也是合法的。
def创建了一个对象,并将其赋值给一个变量。def语句是生成一个函数对象,并将其赋值给函数名变量。其实与赋值相同。
lambda创建一个函数对象发送给调用者。因此,也可使用lambda表达式创建函数,这一功能允许我们把函数定义内联到语法上一条def语句不能工作的地方。
return将一个结果对象返回给调用者。这个返回值成为函数调用的结果。
yield向调用者返回一个结果对象,但是记住它离开的地方。
global声明了一个模块级的变量并被赋值。在默认情况下,所有在函数内被赋值
的变量,是在这个函数里的本地变量,并仅在函数函数运行过程中存在。为分配一个可以在整个模块中都可以使用的变量名,函数需要在global语句中列举出来。
nonlocal声明了将要赋值的一个封闭的函数变量。Python3.x里才有的语句。函数里嵌套函数时,都使用相同变量名时,只想继承上一个函数里的相同变量时可以使用。
函数是通过赋值(对象引用)传递的。参数是通过赋值传递的。但是,在Python中赋值就是对象引用。因此当参数被传递的对象为可变对象(列表、字典等),当对参数进行变更时,会影响到被传递进来的变量(变量所引用的对象)。
参数、返回值以及变量并不是声明。这个与其它变量相同,不需要提前声明,
或者说是没有任何类型。
Python的函数-作用域
• Python作用域基础
• 作用域法则
• global语句
• 作用域与嵌套语句
• nonlocal语句
作用域针对的是变量。在使用同一个变量名时,会出现作用域问题。
• 一个def内定义的变量名能够被def内部使用。不能在函数外部引用这个变量名。
• def内的变量名与def外的变量名并不冲突。在def内赋值的与def外赋值的相同变量名是不同的变量。
变量名有如下三种不同作用域:
1. 全局:在def外定义的变量名是全局变量
2. 本地:在def内部定义的叫做本地变量
3. 其它:嵌套def时,各自的变量也是独立的。
def myfunc1():
x = 1
def myfunc2():
x = 2
作用域法则
内嵌的模块是全局作用域
全局作用域的作用范围仅限于单个文件
每次的函数的调用都创建了一个新的本地作用域
赋值的变量名除非声明全局变量或非本地变量(Python3.x有非本地变量说法),否则均为本地变量。
所有其它的变量名都可以归纳为本地、全局或者内置。
变量名使用时,查找顺序:LEGB
L:本地变量名 - 在本地是否使用此变量名赋值过。
E:上一层结构中def或lambda的本地变量名 - 上一层是否使用此变量名赋值过。
G:全局变量名 - 在整个文件里是否对变量名赋值过。
B:内置变量名 - Python内部是否存在此变量名。
要是都找不到相应变量名,就会报错。
global语句
在函数内,想改变全局变量,可以使用global语句来定义此变量为全局变量。
工厂函数为:根据要求的对象,一个能够记住嵌套作用域的变量值的函数。这种功能,使用类可以更好的实现,但使用函数也能简单现。