关于python(上)
1.Python解释器
#! /usr/bin/env python3
# 第一行是解释器 类同shell
#-*- coding:utf-8 -*-
2.Python用作计算器
- 使用除法
/
时自动转换为浮点数,需要整除可以使用//
(python整除向下取整。举例:-1/3) - 乘方符号
**
- 取模符号同c++
%
- 变量不定义直接赋值(没有赋值直接调用会出错)
- 交互模式下
_
的值就是上一个表达式的值
3.字符串
- 单引号和双引号都表示字符串。
- $”abc”*3$ -----> $”abcabc”$。
- 当同一行有多个字符串,输出时自动连接。 (只适用于字符串常量,不得用于变量或表达式)
- 可以用下标访问字符串字符,下标为负数时从后往前访问。
- 除了索引,字符串还支持切片访问,如$a=”abcdefg”$, $a[0:2]=ab$。
- 索引越界会报错,但是切片越界不会。
- $len()$可以求一切类型的长度。
4.列表
- 也用下标索引值,也可以切片
- $a[:]$返回列表的浅拷贝 (可以细阅 copy—浅层(shallow)和深层(deep)赋值操作)
- 支持数组相加(就是直接相连)
5.快下课了,看几个倒装
x=0
y="zero" if x==0 else "not zero"
//此时 y="zero"
a=[i for i in range(10)]
//此时 a=[0,1,2,3,4,5,6,7,8,9]
小心犯错
c=[0]
a=[c for i in range(10)]
//此时 a=[[0],[0],[0],[0],[0],[0],[0],[0],[0],[0]]
a[0][0]=1
//此时 a=[[1],[1],[1],[1],[1],[1],[1],[1],[1],[1]]
//但是如果把用来for的c换成某个具体数字 就应该不会这样
关于python(下)
1.for循环
- 类似于foreach的用法
- 有二元遍历
users=['一番':'1','二番':'2','三番':'3']
for key,value in users.items():
print(key,value)
- 集合不能边遍历边修改,因此复制一个新的,修改旧的
users=['一番':'1','二番':'2','三番':'3']
for user,status in users.copy().items():
if status=='2':
del users[user]
- range(0,10)遍历,左闭右开,倒叙(9,-1,-1) //一个0~9 一个9~0 只写一个参数默认左边界是0
- 循环中的break、continue以及else语句
for i in range(2,10):
for(j in range(2,i):
if i%j==0:
print(i,'equals',j,'*',i//j)
break
else: # 当for语句没有被break时,在循环结束后就会执行else中的语句
print(n,'is a prime number')
- pass语句
2.定义函数
- 没有返回值自动返回none
def f(a,b):
print(a,b)
printf(f(1,2))
# none
- 参数值传递,类似形参。函数内修改数组,数组值会变
- 默认参数值要连续
def f(a,b=2,c=3,d=4):
print(a,b,c,d)
f(1)
# 1 2 3 4
- 神奇用法
def f(a,b=2,c=3,d=4):
print(a,b,c,d)
f(b=3,d=5,a=2,c=4) # 直接调用形参名字
# 2 3 4 5
- 解包(溢出会报错)
a=[1,2,3,4]
b={
'a'=2,
'c'=4,
'b'=3,
'd'=5
}
f(*a) # 解包列表
f(**b) # 解包字典
3.数据结构
(1) 列表
- 一个列表里的类型可以不一样,列表和数组几乎没区别
list.append()
len(list)
list.reverse()
list[::-1] # 反转数组
sorted(a) # 这样不改变原数组 可以写成a=sorted(a)
a=[]
for i in range(10):
a.append(i*i)
# a=[0,1,4,9,16,25,36,49,64,81]
# 列表推导式
a=[i*i for i in range(10)]
# a=[0,1,4,9,16,25,36,49,64,81]
(2) 元组
- 与列表的区别在于不可修改
# 元组用小括号,列表用中括号
b=(1,2,3) # b=1,2,3
x,y,z=b
a=[2,3,4]
x,y,z=a
(3) 集合
- 集合对应c的set 字典对应c中的map
a=set()
a={} # 既可以表示集合也可以表示字典
a={1,2,3} # 是哪种类型看具体值
a.add(1)
a.add(2)
a.add(1)
# a={1,2}
a=[1,2,1,3,2]
# 列表去重
a=list(set(a))
(4) 字典
- 字典就是一些key:value键值对
a={
'a':1,
'b':2
}
# 循环字典
knights={'gallahad':'the pure','robin':'the brave'}
for k,v in knights.items(): #.items()
print(k,v)
# 同时遍历两个数组
a=[1,2,3]
b=['a','b','c']
for x,y in zip(a,b): #zip()函数
print(x,y)
4.模块
from python_lesson.model_1 import model_a
from python_lesson.model_1 import fib1 as fib3,fib2
from random import randint
randint(1,10) # 返回一个随机数,闭区间
5.输入与输出
- 输出格式化
print("%04d %.2lf %s" %(1,3.4,'abc'))
- 读写文件(ipython3 可以执行shell命令)
fout=open('test.txt','w')
fout.write("111\n")
for i in range(10):
fout.write(str(i)+'\n')
fout.close()
# 不用手动关闭了
with open('test.txt','w') as fout:
for i in range(10):
fout.write(str(i)+'\n')
# 读取文件
with open('test.txt','w') as fin:
print(fin.read()) # 读取整个文件
with open('test.txt','w') as fin:
print(fin.readlines()) # 读行 返回一个列表
with open('test.txt','w') as fin:
for line in fin: # fin文件对象支持迭代
rint(line,end='')
6.异常处理
def divide(x,y):
try:
res=x/y
except Exception as e:
print(str(e))
else:
print("result is",res)
# 不管有无异常都执行finally
finally:
print(”executing finally clause)
7.类
- 静态变量
class Car:
static_a=[]
a=Car()
b=Car()
a.static_a.append(1)
b.static_a.append(1)
# a=[1,1]
- 基础用法
class Car:
def __init__(self): # 一个固有函数 类似构造函数
print("createde!")
self.a=[] # 定义成员变量
def update(self): # 定义成员函数
for i in range(len(left.a)):
self.a[i]*=2
a=Car()
# created!
b=Car()
# created!
a.a.append(1)
# [1]
b.a.append(2)
# [2]
class Car:
def __init__(self,x,y): # 一个固有函数 类似构造函数
print("createde!")
self.a=[x,y] # 定义成员变量
def update(self): # 定义成员函数
for i in range(len(left.a)):
self.a[i]*=2
a=Car(1,2)
# created!
a.update()
# a=[1,4]
# 也可以用解包的方式创建对象
- 继承
class Tool(Car):
def __init__(self):
print("tool created")
super().__init__(1,2)