python基础
# 1. python初识
Python是一种解释型、高级编程语言,设计用于编写自动化脚本,随着版本更新和功能增加,逐渐被用于独立的大型项目开发。
Python的设计哲学强调代码的可读性和简洁性,其语言结构以及面向对象的方法旨在帮助程序员为小型的和大型的项目编写逻辑清晰的代码。Python解释器几乎可以在所有的操作系统中运行,并且拥有一个巨大而广泛的标准库,能够自动管理内存使用。
Python的特点包括:
- 解释型语言:开发过程中没有编译环节,类似于PHP和Perl语言。
- 交互式语言:可以在一个Python提示符后直接执行代码。
- 面向对象:支持面向对象的风格或代码封装在对象的编程技术。
- 高级数据结构:提供了适用于各个主要系统平台的源码或机器码。
- 动态类型:开发人员无需考虑诸如内存等底层细节,可专注于编写代码逻辑本身。
# 2. python安装
IDLE:官网:https://www.python.org/downloads/
下载安装即可,安装完成可通过命令python --version
查看版本验证是否安装成功
# 3. python基础语法
# 3.1 python标识符:数字,字母,下划线
- 以单下划线开头的代表不能直接访问的类属性。需通过类提供的接口进行访问,不能用"from xxx import *"而导入
- 以双下划线开头的(__foo)代表类的私有成员;
- 以双下划线开头和结尾的(foo)代表python里特殊方法专用的标识,如__init__()代表类的构造函数;
- 可以使用斜杠( \)将一行的语句分为多行显示。
- Python 使用单引号(' ),双引号(" ),三引号(''' """) 来表示字符串;
- python中单行注释采用 # 开头。python 中多行注释使用三个单引号(''')或三个双引号(""")。
- 变量可以指定不同的数据类型,这些变量可以存储整数,小数或字符。
- Python中的变量不需要声明,变量的赋值操作既是变量声明和定义的过程。
- 在Python 里的数值和字符串之类的都是不可变对象,对不可变对象操作的结果都会生成一个新的对象。
# 3.2 输入输出函数
输出一些特定数据,我们就必须用到print()函数
print('今天你吃饭了吗?')
通过input()函数获取我输入的数据值
b = input("请输入运算符号")
print(b)
2
# 4. python数据类型
- Numbers(数字)
- String(字符串)
- List(列表)
- Tuple(元组)
- Sets(集合)
- Dictionary(字典)
# 4.1 Numbers(数字)
数字数据类型有int、float、bool(布尔型)、complex(复数)
算术运算符
在Python中,运算符有:+、-、*、/、%、**、//(加、减、乘、除、取模、次方、整除)
注:Python 中没有 ++ 或 -- 自运算符
- +:加法,两个变量相加求和
- -:减法,两个变量相减求差
- *:乘法,变量相乘求积
- /:除法,变量相除求商
- %:取模,得到除法结果第一位余数
- **:次方,求变量(a)的n次幂->(a)ⁿ,可以用pow()函数代替
- //:整除,取除法后的整数部分
# 4.2 String(字符串)
使用单引号(' ),双引号(" ),三引号(''' """) 来表示字符串
a = 'Hello','World'
b = 'Hello''World'
#注意字串符a与b的区别,如果有逗号,那么输出时将会是两个字串符一起输出: ('Hello','World')
# 如果没有输出将会两个字串符相互结合输出: HelloWorld
c,d= 'Hello','World'
print(b[0:-2])
print(c[0:-3])
print(d[0:-1])
print(c*2,d*2)#各输出两次
print((c+d)*2)#结合输出两次
print('Hello,\nWorld')
print(r'Hello,World')#加了r后转义字符失效
2
3
4
5
6
7
8
9
10
11
12
13
# 4.3 List(列表)
创建一个列表,只需要把逗号分隔的不同的数据项使用方括号括起来即可。
#列表的数值内容中,数值可以类型不同
变量名称 = ['数值',数值]
2
- 访问和切片操作
list[start_index:end_index:step]
- start_index:起始位置
- end_index:结束位置
- step:步进,为正数的时候表示从前向后,负数表示从后往前,决定了切片的方向,step参数可以省略,步进默认为1。
输出指定列表被切割后的指定数据
print(a[0:1:3])
反转列表
print(a[::-1])
- 按索引获取数据
a = ['a','b','c',3]
print(a[3])
2
- 修改列表中指定索引数据,可以直接修改
a[0]='A'
a[0:3]='A','B','C'
2
- 删除列表中指定索引数据
a[0]=[]
- 统计数据个数
print(len(a))
- 在列表末尾添加新数值
a.append('1111')
# 4.4 Tuple(元组)
元组的语法与列表差不多,不同之处就是元组使用小括号(),且括号中元素不能被改变,创建元组可以不需要括号;而列表是使用中括号[]。
变量名称 = ('元素',元素)
变量名称 = "元素","元素"
a = ('Java','Python',2)
b = () #空元组
2
3
4
- 元组的访问和切片
str1 = a[0]
tup3 = a[2:3]
2
- 删除元组
del a
- +和*运算
a = ('Java','Python',2)
b = "Hello","World"
c = a+b #相互结合
print(c*2)#复制输出
2
3
4
- 统计数据个数、位置
print(len(a))
print(a.index('Java'))
2
3
- 判断某元素是否在元组里
bool1 = 'Java' in a
- max,min,count函数
print(max(a))
print(min(a))
count1 = a.count('Java')
print(count1)
2
3
4
- list转换为列表
list_1 = list(a)
# 4.5 Sets(集合)
Set(集合)数据类型它和Tuple、List一样都属于复合数据类型,而且集合数据类型是一种无序不重复元素的序列
使用大括号{}或内置函数Set()来创建一个集合(创建一个空集合必须用Set()函数,不可用{},因为{}实质是创建一个空的字典
#创建集合a
a = {'a','b','c','d','a'}
#因为集合是无序不重复元素序列,所以不会输出多出的a
print(a)
#运用Set()函数创建集合b
b = set('abcdeffff')
2
3
4
5
6
与List与Tuple一样,Set也支持数学运算符运算
a = set('sdfygsyfysdgfsdtfsyhf')
b = set('hgdhsdfsghdvhgsfs')
print(a - b) #减号(-)的作用就是输出a集合中b集合内没有的元素
print(a | b) #竖线符号(|)主要输出集合a或b中包含的元素
print(a & b) #逻辑符号(&:and)就是要输出集合a和b中共同包含的元素
print(a ^ b) #乘方(^)主要输出不同时包含于a和b的元素
2
3
4
5
6
# 4.6 Dictionary(字典)
在Python中,字典是另外一种数据储存的可变容器,而且可以存储任何数据类型的数据值对象。
创建一个空字典需要用大括号{},在字典中每一个值对用冒号,且每个值需要逗号(,)分隔。
a = {'a':'Python','b':'Java','c':'C++'}#创建一个字典
- 字典的访问
a = {'a':'Python','b':'Java','c':'C++'}
print(a['a'])
2
- 字典的修改
a['a']='Python3'
a['d']='C#'
2
- 字典的删除
a.clear() # 清除
del a['a']
2
# 5. 判断语句
在Python中,判断语句有if、if…else、if…elif…else。关键词有or与and。
- if,比如输入两个数,比较大小
a =int(input())
b = int(input())
if a > b :
print("第一个数大")
if a < b :
print("第二个数大")
2
3
4
5
6
- if…else,比如输入两个数,比较大小
a =int(input())
b = int(input())
if a > b :
print("第一个数大")
else a < b :
print("第二个数大")
2
3
4
5
6
- if…elif…else,比如输入一个数,判断这个数是正数、负数还是零
a =int(input())
if a > 0 :
print("正数")
elif a < 0 :
print("负数")
else :
print("零")
4. or与and
比如输入两个数,判断这两个数是否都是正数
```python
a =int(input())
b = int(input())
if a > 0 and b > 0 :
print("都是正数")
else :
print("不是都是正数")
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 6. 循环语句
在Python中,循环语句有for和while。 for循环可以遍历任何可迭代对象,可以是一个列表或者一个字符串等
注:Python中没有do …while循环语句!
- for 变量 in 顺序:
for i in range(8): #range(8)表示从0到7
print(i)
a = '123456abcd'
for i in range(len(a)):
print(i,':',a[i])
2
3
4
5
6
- while循环语句
while 条件:
循环体
2
- 循环使用 else 语句 在 python 中,for … else 表示这样的意思,for 中的语句和普通的没有区别,else 中的语句会在循环正常执行完(即 for 不是通过 break 跳出而中断的)的情况下执行,while … else 也是一样。
for num in range(10,20): # 迭代 10 到 20 之间的数字
for i in range(2,num): # 根据因子迭代
if num%i == 0: # 确定第一个因子
j=num/i # 计算第二个因子
print("%d 等于 %d * %d" % (num,i,j))
break # 跳出当前循环
else: # 循环的 else 部分
print(num, '是一个质数')
2
3
4
5
6
7
8
# 7. 函数
在Python中,函数是一段可重复使用的代码块,用来完成一个特定的功能。函数可以接收输入的参数,也可以返回处理结果。
# 定义一个函数
你可以定义一个由自己想要功能的函数,以下是简单的规则:
- 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()。
- 任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。
- 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
- 函数内容以冒号起始,并且缩进。
- return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。
# 参数传递
- 可变类型和不可变类型
在 python 中,strings, tuples, 和 numbers 是不可更改的对象,而 list,dict 等则是可以修改的对象。
不可变类型:变量赋值 a=5 后再赋值 a=10,这里实际是新生成一个 int 值对象 10,再让 a 指向它,而 5 被丢弃,不是改变a的值,相当于新生成了a。
可变类型:变量赋值 la=[1,2,3,4] 后再赋值 la[2]=5 则是将 list la 的第三个元素值更改,本身la没有动,只是其内部的一部分值被修改了。
- python函数的参数传递
不可变类型:类似 c++ 的值传递,如 整数、字符串、元组。如fun(a),传递的只是a的值,没有影响a对象本身。比如在 fun(a)内部修改 a 的值,只是修改另一个复制的对象,不会影响 a 本身。
可变类型:类似 c++ 的引用传递,如 列表,字典。如 fun(la),则是将 la 真正的传过去,修改后fun外部的la也会受影响
# 参数类型
必需参数 调用带参函数时必须传入参数
默认参数
def custom_function(str='Hello'):
print(str)
2
- 可变参数
def custom_function(*strs):
for var in strs:
print var
2
3
- 关键字参数
def custom_function( str ):
print(str)
printme( str = "My string")
2
3
# 命名空间和作用域
如果一个局部变量和一个全局变量重名,则局部变量会覆盖全局变量。因此,如果要给函数内的全局变量赋值,必须使用 global 语句。
TestNum = 10
def TestMethod():
# 正确执行代码就取消以下注释:
# global TestNum
TestNum = TestNum + 1
print TestNum
TestMethod()
print TestNum
2
3
4
5
6
7
8
9
执行上面这段代码,报UnboundLocalError 的错误
# 8. 文件I/O
Python 提供了丰富的文件操作。你可以使用内建函数 open()
来打开一个文件,然后使用 file
对象的 read()
或 write()
函数来读取文件的内容或向文件中写入内容。
raw_input 函数 从标准输入读取一个行,并返回一个字符串(去掉结尾的换行符)
input 函数 和raw_input函数基本类似,但是 input 可以接收一个Python表达式作为输入,并将运算结果返回
open 函数 打开一个文件,创建一个file对象
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
参数说明:
- file: 必需,文件路径(相对或者绝对路径)。
- mode: 可选,文件打开模式
- buffering: 设置缓冲
- encoding: 一般使用utf8
- errors: 报错级别
- newline: 区分换行符
- closefd: 传入的file参数类型
- opener: 设置自定义开启器,开启器的返回值必须是一个打开的文件描述符。
file对象属性
方法 | 描述 |
---|---|
file.closed | 返回true如果文件已被关闭,否则返回false |
file.mode | 返回被打开文件的访问模式 |
file.name | 返回文件的名称 |
file.softspace | 如果用print输出后,必须跟一个空格符,则返回false。否则返回true |
file对象方法
- close()方法 :关闭该文件,这之后便不能再进行写入
- write()方法 :可将任何字符串写入一个打开的文件。需要重点注意的是,Python字符串可以是二进制数据,而不是仅仅是文字。
- read()方法 :从文件读取字符串。在默认情况下,该函数会读取整个文件。如果文件大于可用内存,你就不能使用这个方法了。
- readline()方法 :从文件读取整行,包括 "\n" 字符。
- readlines()方法 :该函数返回一个列表,其中包含文件中的所有行。如果设置可选参数 sizehint,则读取指定长度的字节,并且将这些字节按行分割。
- seek()方法 :如果文件以二进制模式打开,该函数用于移动文件指针到指定位置。
- tell()方法 :返回文件指针的当前位置。
- truncate()方法 :截取文件,截取的字节通过 size 指定,截取后size后面的内容被删除。
- flush()方法 :在读写模式下,当处理大文件时,使用 flush() 方法会立即把缓冲区内容写入硬盘。
- next()方法 :返回文件中的下一行。
文件定位
- tell()方法返回文件对象当前所处的位置,它是从文件开头开始算起的字节数。
重命名和删除文件
- rename() 方法:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import os
# 重命名文件test1.txt到test2.txt。
os.rename( "test1.txt", "test2.txt" )
2
3
4
5
6
7
8
- remove()方法:删除文件,需要提供要删除的文件名作为参数
- 目录相关
- mkdir()方法: 创建目录
- chdir()方法:改变当前工作目录到指定的路径,方法需要的一个参数是你想设成当前目录的目录名称
- getcwd()方法:显示当前工作目录
- rmdir()方法:删除指定目录,删除目录前,需先删除目录里的所有文件
- listdir()方法:列出指定目录下的所有文件和目录名
# 9. 异常处理
Python提供了两个非常重要的功能来处理Python程序在运行中出现的异常和错误。你可以使用该功能来调试Python程序。
- try/except
- try/except...else
try:
# 可能会抛出异常的代码
pass
except ExceptionType:
# 处理异常的代码
pass
else:
# 如果没有异常,执行的代码
pass
finally:
# 无论是否发生异常,都会执行的代码
pass
2
3
4
5
6
7
8
9
10
11
12
- try/finally
try:
# 可能会抛出异常的代码
pass
finally:
# 无论是否发生异常,都会执行的代码
pass
2
3
4
5
6
- raise语句:如果你已经预感某段代码可能会出错,你可以使用raise语句抛出一个指定的异常
raise [Exception [, args [, traceback]]]
- 自定义异常
class Networkerror(RuntimeError):
def __init__(self, arg):
self.args = arg
2
3
# 10. 模块
Python 模块(Module),是一个包含一组功能的文件,其后缀名是.py。模块可以被别的程序引入,以使用该模块中的函数等功能。
- import 语句
import module1[, module2[,... moduleN]]
- from…import 语句
from modname import name1[, name2[, ... nameN]]
- from…import * 语句
from modname import *