您的位置:首页 > 编程语言 > Python开发

Python3 基础学习笔记

2017-04-10 19:58 513 查看

Python3 基础学习笔记

这篇博客不是完整的python教程,只是我在学习python3时记下的一些容易忘记的或比较重要的知识点,里面的代码大多是转自 廖雪峰的python3教程菜鸟教程 。不管怎样,还是希望本篇博客对读者有用。

基础语法

py3里的print比py2多加了括号,使用方式为:

print ("hello world!")


多行语句的实现方式为反斜杠 \

total = item_one + \
item_two + \
item_three


在 [], {}, 或 ()中的多行语句,不需要使用反斜杠()

total = ['item_one', 'item_two', 'item_three',
'item_four', 'item_five']


python3中的复数用 j 表示

基本数据类型

输出字符串时,如果不想让其中的\变成转义字符,可以在字符串前面加一个r。

python中的字符串不能被改变(赋值)

算术运算符

% 返回除法的余数

** 返回次幂

// 返回除法的整数

逻辑运算符只有 and or not

运算符的优先级:



编程第一步

关键字end可以用于将结果输出到同一行,或者在输出的末尾添加不同的字符,实例如下:

a, b = 0, 1
while b < 1000:
print(b, end=',')
a, b = b, a+b


语句结构

条件语句中 elif 即c语言的 else if

for 循环的一些用法:

languages = ["C", "C++", "Perl", "Python"]
for x in languages:
print (x)


for i in range(0, 10, 3) :
print(i)


数字

数学函数:



随机数函数:



三角函数:



字符串

字符串运算符:



字符串格式化输出:

print ("我叫 %s 今年 %d 岁!" % ('小明', 10))


python三引号允许一个字符串跨多行,字符串中可以包含换行符、制表符以及其他特殊字符。

字符串内建函数:











列表(list)

列表包含的方法:



元组(tuple)

Python 的元组与列表类似,不同之处在于元组的元素不能修改。

元组的元素不能被删除,但整个元组可以被删除。

元组使用小括号或者不加,列表使用方括号

创建空元组只要一个括号。

创建一个元素的元组需要在元素后面加逗号。

字典(dictionary)

创建字典的语法:

d = {key1 : value1, key2 : value2 }


字典的key可以是数字,字符串或元组,但不能是列表

字典的value可以有列表或字典

字典的内置方法:



迭代器和生成器

迭代器用于输出列表的几种方法:

list=[1,2,3,4]
it = iter(list)    # 创建迭代器对象

for x in range(len(list)):
print(next(it), end=" ")


list=[1,2,3,4]
it = iter(list)
for x in it:
print (x, end=" ")


import sys         # 引入 sys 模块
list=[1,2,3,4]
it = iter(list)    # 创建迭代器对象

while True:
try:
print (next(it), end=" ")
except StopIteration:
sys.exit()


生成器可以理解为一种特殊的函数,在执行generator过程中,遇到yield就中断,返回该返回的数,下次又继续执行,如果没有yield可执行了,就报错。例子:

def fib(n):
a, b , counter = 0, 1, 0
while counter < n:
yield b
a, b = b, a+b
counter += 1

import sys

f = fib(20)
print(type(f))
while True:
try:
print(next(f), end=' ')
except StopIteration:
sys.exit()

for x in fib(20):
print(x, end=' ')


函数

python3 调用函数时可使用的正式参数类型:

#必须参数
def printme( str ):
print (str)
return

printme()


#关键字参数
def printinfo( name, age ):
print ("名字: ", name)
print ("年龄: ", age)
return

printinfo( age = 22, name = "cyiano" )


#默认参数
def printinfo( name, age = 35 ):
print ("名字: ", name)
print ("年龄: ", age)
return;

printinfo(age=50, name="cyiano")
print ("------------------------")
printinfo(name="cyiano")


#不定长参数
def printinfo( arg1, *vartuple ):
print ("输出: ")
print (arg1)
for var in vartuple:
print (var)
return

printinfo( 10 )
printinfo( 70, 60, 50 )


python 函数中新加的变量为局部变量

数据结构

列表

python中的列表可以当做堆栈来使用,每次.pop()弹出的是最后的元素

python中的列表还可以当做队列使用,每次.popleft()弹出的是最前的元素。例如:

from collections import deque
queue = deque(["Eric", "John", "Michael"])
queue.popleft()


列表推导式:在一行内利用for、if语句生成数组。例如:

vec = [2, 4, 6, 8]
[[x*2, x**2] for x in vec if x>2]

v1 = [2, 4, 6]
v2 = [4, 3, -9]
[x*y for x in v1 for y in v2]
[x+y for x in v1 for y in v2]


嵌套列表,以矩阵转置为例,实现方法如下:

matrix = [
[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]
]
transposed = [[row[i] for row in matrix] for i in range(4)]


matrix = [
[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]
]
transposed = []
for i in range(4):
transposed.append([row[i] for row in matrix])


matrix = [
[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]
]
transposed = []
for i in range(4):
transposed_row = []
for row in matrix:
transposed_row.append(row[i])
transposed.append(transposed_row)


用del把一个列表删成空列表的方式:del a[:]

遍历

字典的遍历方法:

for k, v in knights.items():


列表的遍历方法:

for i, v in enumerate(['tic', 'tac', 'toe']):


反向遍历的方法:

for i in reversed(range(1, 10, 2)):


按顺序遍历集合的方法:

for f in sorted(set(basket)):


模块

一般的导入方法:

import support
support.name_access("cyiano")


在文件夹内的导入方法:

impor
c642
t folder.support   #文件夹最好不要有空格
folder.support.name_access("cyiano")


给模块内函数赋予本地名称:

import folder.support
folder.support.name_access("cyiano")
access = folder.support.name_access


from…import语句的使用:

from folder.support import name_access  #导入模块特定函数
from folder.support import *            #导入模块所有函数
name_access("cyiano")


使用包来管理python模块空间时,目录必须有一个 __init__.py 文件。

输入和输出

输出格式美化

print中字符串后面可以跟上 .ljust().rjust().center()zfill()

print中用.format()的话需要在语句里加大括号{},.format()会自动扫描大括号。大括号里的内容决定输出字符的排列,例如:

import math
print('常量 PI 的值近似为 {0:5.10f}。'.format(math.pi))
# :前面数字代表format中的编号,5.10代表总长5位右对齐,保留10位小数


.format()里面可以是一个字典:

print('{name}网址: {site}'.format(name='菜鸟教程', site='www.runoob.com'))


比较旧的传递参数方式:

import math
print('常量 PI 的值近似为:%5.10f。' % math.pi)


文件对象方法

打开一个文件:

f = open("newtxt.txt", "r+")    # "w"表示只写,"r"表示只读,"r+"表示可读又可写,还有其他模式


读和写:

f.read(15)      # 读取15个字节,没有参数则读取所有
f.readline()    # 读取一行
f.readlines()   # 读取所有行并返回列表,有参数则按固定长度进行分割

f.write("ahahahaaha.....")      # 从指针的位置开始写(会覆盖),必须是字符串

f.seek(5)       # 移动指针位置

f.close()       # 最后记得关闭文件


有一种方法可以在打开文件读取完毕后自动调用close()函数,就是使用with语句:

with open('/path/to/file', 'r') as f:
print(f.read())


StringIO 和 BytesIO

很多时候,数据读写不一定是文件,也可以在内存中读写。StringIO顾名思义就是在内存中读写str,而BytesIO实现了在内存中读写bytes。

pickle模块

错误和异常

try和except可以用来处理异常情况。except后面可以跟一个特定异常类型,或用元组表示的一组类型,或者什么都不跟(任何异常都会触发)。

如果使用else语句,必须在except后面。else语句在没有异常时执行。

finally语句不论有无异常都会执行。

while True:
try:
x = int(input("Please enter a number: "))
except OSError as err:
print("OS error: {0}".format(err))
except ValueError:
print("Not a valid number! Try again! ")
else:
print("You just have inputed: {}".format(x))
finally:
print("next round: ")


抛出一个异常使用raise语句,raise后面跟上特定的异常类型。

def division(x, y):
if y == 0 :
raise ZeroDivisionError('The zero is not allow')
return x / y

try:
division(2, 0)
except ZeroDivisionError as e:
print(e)

# 另一种方法
try:
division(2, 0)
except ZeroDivisionError:
raise


标准库概览

操作系统接口:os, shutil,

文件通配符:glob

命令行参数、错误输出重定向和程序终止:sys

字符串正则匹配:re

数学:math, random

日期和时间:datetime

数据压缩:zlib

模块测试:doctest, unittest
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: