Python入门(一)·环境配置与python基础
这篇博客记录我的python入门学习过程。
使用阿里云服务器ubuntu 18.04
关于Linux的入门参照上一篇博客
学习使用的视频来自B站 黑马程序员python教程
python简介
它是作者基于C语言编辑的解释器
最大的优点是开源得很早。
编译器是把编程语言翻译成机器语言使计算机能够读懂的程序。
编译器有两种,一种是编译器,一种是解释器,它们工作的时间点不同。
解释性语言会一行行地解释后一行行地提交给cpu,相比于编译性语言,翻译速度较慢;但优点是解释器解释出的代码可以在多平台转移,只要不同平台上有对应平台的解释器,一份代码就可以在多平台上执行。
python的特点
1.完全面向对象
2.拥有强大的标准库
3.提供大量的第三方模块
python环境配置
解释器python
python2.x解释器 python
python3.x解释器 python3
其他解释器:
CPython——官方版本的C语言实现
Jython ——可以运行在java平台
IronPython——可以运行在.NET和Mono平台
PyPy ——python实现的,支持JIT即时编译
交互式 ipython
在终端中直接进入python
可以用exit()退出
IPython是一个python的交互式shell,在终端用命令ipython3进入。
支持自动补全
自动缩进
支持bash shell命令
内置了许多有用的功能和函数
基于BSD开源
集成开发环境 pycharm
IDE 继承开发环境
继承了开发软件需要的以下工具
图形用户界面
代码编辑器(自动补全 自动缩进)
编译器、解释器
调试器(断点、单步)
。。。
pycharm安装和使用
由于我用的是云服务器ubuntu,没有图形界面,下载pycharm也无法使用,因此这部分暂时不写。如果后续有使用再补充。
anaconda安装
anaconda是管理python包的一个工具,能提供工具包下载和管理服务。在这里记录一下anaconda安装的过程
参考链接linux下安装anaconda
1、进入官网选择要下载的对应操作系统的版本
https://www.anaconda.com/distribution/
2.上传到云服务器上。这里我是直接放在普通用户的home目录下的创建的anaconda文件夹。
3.bash Anaconda3-2021.05-Linux-x86_64.sh
即执行安装程序,这里文件名可以用自动补全
根据提示操作,这里把安装位置也放在上述文件夹下——还没弄懂Linux的文件安装是否要遵守什么规则。
如果提示缺少什么包
用yum install -y xxxx 安装对应包即可
4.环境变量配置
还需要配置环境变量
sudo vi /etc/profile
然后按i进入插入模式,再按向下键到文件最下面,在文件末尾加入:
#Anaconda
export PATH=$PATH:/home/python/anaconda3/bin
(注意这里的路径应该是刚才选择的安装路径)
按下esc键退出插入模式,再输入:wq退出编辑。
然后重新载入配置文件
source /etc/profile
激活后即可使用anaconda。
Anaconda常用命令整理
参考自博客Anaconda常用命令大全
管理conda
1.查看conda版本
conda --version
2.升级当前版本conda
conda updata conda
管理环境
1.创建并激活一个环境
conda create --name snowflake biopython
2.激活新环境
source activate snowflakes
新的开发环境会被默认安装在你conda目录下的envs文件目录下。也可以指定一个其他的路径
3.列出所有环境
conda info -e
4.切换到另一个环境
conda activate/deactivate name
5.复制一个环境
通过克隆来复制一个环境。这儿将通过克隆snowflakes来创建一个称为flowers的副本。
conda create -n flowers --clone snowflakes
6.删除一个环境
conda remove -n flowers
conda用yaml导入和导出环境
# 导出和迁移环境
conda env export > environment.yaml
# 在新环境中导入
conda env create -f environment.yaml
# create完了再更新一下
conda env update -f environment.yaml
管理python
1.安装一个不同版本的python
conda create -n name python=3
2.关闭环境并返回系统目录
source deactivate
管理包
1.查看已安装包
conda list
2.向指定环境安装包
conda install --name env_name package_name
3.到anaconda资源网站或其他第三方网站安装包
到网站搜索获得对应指令即可
4.使用pip安装包
对于那些无法通过conda安装或者从Anaconda.org获得的包,我们通常可以用pip命令来安装包。
移除包、环境、conda
conda remove -n env_name package_name
rm -rf ~/anaconda
conda remove --name your_env_name --all
分享环境
conda activate target_env_name
conda env export > environment.yml
conda env create -f environment.yml
给anaconda添加清华镜像源
清华镜像站使用帮助anaconda
先执行命令
conda config --set show_channel_urls yes
在系统目录下生成.condarc文件,访问该文件,修改内容为:
channels:
- defaults
show_channel_urls: true
default_channels:
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
custom_channels:
conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
最后清除缓存索引保证使用的是镜像源
conda clean -i
python基础
py文件命名规则 必须以 字母、下划线开头,并建议文件名中只有小写字母。
文件编码
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
注释
注释的作用——让人看得懂。
单行注释(行注释)
# 注释内容
为了保证整齐,在与代码不同行时,星号后一般加一个空格
如果与代码同行,与代码最少间隔2个空格
多行注释(块注释)
一对连续的三个引号之间的内容,单双引号都可以
‘’‘
注释内容
’‘’
对于复杂的操作,应在代码开始前多行注释
对比较难懂的某一句代码,应在该行上方或后面补充代码。
注释内容应该假设阅读者读得懂代码,只要注释代码的用处。
关于代码规范,官方给出了说明文档
http://www.python.org/dev/peps/pep-0008/
谷歌有提供对应的中文说明文档
运算符
算数运算符
+、-、*、/——加减乘除
//——取整除
%——取余数
**——幂
在python中,*运算符可以用于字符串,结果就是字符串重复指定次数
比较运算符
逻辑运算符
与运算符——and
或运算符——or
非运算符——not
赋值运算符
字符串中的转义字符
变量的基本使用
变量定义
每个变量在使用前都必须被赋值,赋值后变量才会被创建
等号= 用来给变量赋值
变量名只有第一次出现的时候才是定义变量,再次出现时就是使用已定义好的变量。
变量的类型
在Python中定义变量不需要说明变量类型,解释器会根据等号右侧的数据理解保存的数据类型,以下依次为字符串变量、整数型变量、布尔变量、浮点数型
var_str_name = " 字符串 "
var_int_name = 18
var_bool_name = True or False
var_float_name = 18.0
python的变量类型可以分为
1.数字型
整型 int
长整型 Long——在python3.0后就没有长整型了。
浮点型 float
布尔型 bool
复数型 complex
2.非数字型
字符串类型 str
列表
元组
字典
函数type可以查看变量的具体类型
不同类型数据的计算
1.数字型数据可以直接进行运算;其中bool型变量以数字1、0参与运算。
2.字符串变量之间可以用+号进行拼接
3.字符串变量可以和整型用*进行重复拼接
4.数字型变量和字符串变量不能进行其他运算。
变量的输入
函数input用于获取用户的输入
input(“输入提示信息”)
变量类型转换
函数int()
函数float()
函数str()
变量的格式化输出
格式化操作符 %
包含%的字符串称为格式化字符串
%和不同的字符连用,不同的数据类型需要不同的格式化字符
格式化字符 | 说明 |
---|---|
%s | 字符串 |
%d | 有符号十进制整数,例子%06d,输出字符用整型表示,显示6位,不足处用0补足 |
%f | 浮点数,例子%.02f,输出字符用浮点数表示,小数点后显示2位 |
%% | 输出% |
语法格式如下: | |
print(“格式化字符串”,%(对应变量元组)) |
补充内容:
python中目前有3种方法在输出中包含变量,以上为第一种
第二种:str.format()
即用{}代替格式化控制符,用.format方法指出对应位置的变量内容
intput:'Hello {name}'.format(name='testerzhang')
output:'Hello testerzhang'
intput:'{2}, {1}, {0}'.format('a', 'b', 'c')
output 'c,b,a'
第三种:在python3.6之后可以直接在字符串中用{var_name}
其中user_name可以是变量名、列表元素、字典值
变量的命名
1.标识符和关键字
标识符由数字、字母、下划线组成,不可以以数字开头。
关键字就是python已经内置的标识符,具有特殊的功能和含义,不允许定义和关键字同名的变量名。
查看内置关键字的方法:
import keyword
print(keyword.kwlist)
注意:python标识符区分大小写
命名规则:
变量定义时,等号= 左右应各有一个空格
官方推荐命名方法:如果需要多个单词组成标识符,每个单词都小写,用下划线连接。
驼峰命名法:大小驼峰命名法。
常用语句与语法
if语句与if嵌套(判断语句/分支语句)
#if-else语句
if condition:
代码块1
else:
代码块2
#if-elif语句
if condition1:
代码块1
elif condition2:
代码块2
elif condition3:
代码块3
else:
代码块4
#if嵌套
if condition1:
if condition1_1:
if condition1_1_1:
代码块1
#满足条件condition1、condition1_1、condition1_1_1执行
代码块2
#满足条件condition1、condition1_1时执行
代码块3
#满足条件condition1时执行
import导入模块
import package_name
import package_name as shot_package_name
from package_name import function_name
from package_name import *
#导入模块后如何查看该模块有什么功能
import package_name
package. #按下tab
循环 while break continue
程序执行有3种流程:顺序、分支、循环
while condition: #condition可以是条件、计数器等
代码块1
代码块2
条件处理语句 #改变condition中判断条件的变量,可以是计数加一或其他
if break_condition:
代码块3
break
# break直接结束循环,跳到代码块6去执行
if continue_condition:
代码块4
continue
# continue跳过当前这次循环的后续代码,即直接跳回代码块1
# 在while中,一般不用continue,因为条件处理语句是在代码块中
# 更多地用在for循环中
代码块5
代码块6
# while 循环也可以嵌套,这里不举例了
循环(遍历) for语句
python 中 for循环可以遍历任何序列的项目,如一个列表或者一个字符串。
for item in sequence:
代码块1
# item是列表中一个元素 或字符串中一个字符(包括空格等)
for num, item in enumerate(sequence):
代码块2
# num是表示item在sequence中对应位置
# enumerate()返回一个……对象
#下面是enumerate的说明
enumerate(iterable[, start]) -> iterator for index, value of iterable
|
| Return an enumerate object. iterable must be another object that supports
| iteration. The enumerate object yields pairs containing a count (from
| start, which defaults to zero) and a value yielded by the iterable argument.
| enumerate is useful for obtaining an indexed list:
| (0, seq[0]), (1, seq[1]), (2, seq[2]), ...
'''
完整的for-else循环。
如果循环体内部使用break退出循环,else中代码块不会被循环,
如果集合中所有元素都被遍历了,那么会执行else中的代码块
'''
for item in iteration:
代码块1
else:
代码块2
match-case语句(switch) in python3.10 beta
近期发布的python3.10 beta版本中增加了对switch语法的支持。
函数基础
函数的基本使用:定义、调用
1.函数的定义
# 函数是相对独立的代码,
#定义函数时应与其他代码(包括注释)保留两行空行
def function(argument1,argument2,...):
'''
函数说明文档,前后用3对引号
对功能较简单的函数直接给出返回值意义或功能
对复杂的函数应该说明其输入参数意义,输出形式,及其他内容
说明之后应空1行开始代码块
'''
代码块
函数的名称应该能表示函数的功能
函数的名称就是标识符,应符合标识符的命名规则要求
2.函数的导入和调用
import function_file_name
# 这里导入的应该是保存函数定义的文件的名字
#导入后可以直接以使用工具包的方法使用该函数
function_file_name.function(arg1,arg2,...)
函数的参数、返回值
1.参数的使用
形参:定义函数时括号中的参数
实参:调用函数时括号中传入的参数
2.返回值
函数中用 return 返回函数值
注意 return之后的函数代码不会被执行,return是一个结束函数的标志
3.函数的嵌套调用
def function1():
代码块1
def function2():
代码块2
function1()
代码块3
# 调用函数2时,内部会调用函数1,
# 即调用函数2会执行代码块2、代码块1、代码块3
函数的参数传递
这部分内容我觉得菜鸟教程中讲得比黑马程序员python视频教程好得多:菜鸟教程python3-函数的参数
在 python 中,类型属于对象,变量是没有类型的:
a=[1,2,3]
a="Runoob"
以上代码中,[1,2,3] 是 List 类型,“Runoob” 是 String 类型,而变量 a 是没有类型,她仅仅是一个对象的引用(一个指针),可以是指向 List 类型对象,也可以是指向 String 类型对象。
可更改(mutable)与不可更改(immutable)对象
在 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 也会受影响
python 中一切都是对象,严格意义我们不能说值传递还是引用传递,我们应该说传不可变对象和传可变对象。
函数的参数
以下是调用函数时可使用的正式参数类型:
必需参数
关键字参数
默认参数
不定长参数
必需参数
必需参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样。
关键字参数
关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值。
使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值。
默认参数
调用函数时,如果没有传递参数,则会使用默认参数。
不定长参数
你可能需要一个函数能处理比当初声明时更多的参数。这些参数叫做不定长参数,和上述 2 种参数不同,声明时不会命名。基本语法如下:
def printinfo( arg1, *vartuple ):
'''打印任何传入的参数'''
print ("输出: ")
print (arg1)
print (vartuple)
# 调用printinfo 函数
printinfo( 70, 60, 50 )
匿名函数
python 使用lambda来创建匿名函数。
所谓匿名,意即不再使用 def 语句这样标准的形式定义一个函数。
- lambda 只是一个表达式,函数体比 def 简单很多。
- lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
- lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。
- 虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。
lambda [arg1 [,arg2,.....argn]]:expression
模块
模块是python程序架构的核心概念
1.各种工具包都是模块
2.以扩展名.py结尾的python文件都是模块
3.模块中定义的函数和全局变量是模块可以提供给外界使用的工具
模块名也是标识符,需要符合标识符命名规则:
调用模块中的内容,即用 module.var 或者 module.function的方法使用。
pyc文件
在执行过的python文件的目录下,会有一个__pycache__文件夹,下面放的就是.pyc文件(二进制文件),这些文件是编译过的python文件。
在import 一个模块后,代码导入的其实是这个.pyc。
这会使得一行一行编译执行的解释器在导入模块时有更快的运行速度。
高级变量类型
需要说明的是,这三种变量类型都可以看作sequence序列类型,也可以理解为容器,因此有一些通用的方法。
列表
列表 List 在其他语言中被称为数组。
专门用于存储一串信息,列表的索引从0开始
# list的定义
list1=[element0, element1, element2]
# list内元素的取用
list1[1]----->element1 #如果索引超过列表范围,程序会报错
list1[0:1]--->[element0, element1]
列表的常用操作(方法)
11个方法,同样可以用 list. (tab)查看。
方法的具体描述可以用help()
列表方法 | 说明 |
---|---|
list.append(object) | 添加对象到列表中 |
list.cout(value) | 计算value在列表中的出现次数 |
list.insert(index, object) | 在index前插入对象,新对象的索引即为index |
list.reverse() | 翻转列表,这一操作会改变在列表上 |
list.clear | 删除列表中所有元素,这一操作会直接改变列表 |
list.extend(iterable) | 把另一个可迭代变量的元素加入当前列表 |
list.pop([index]) | 弹出并删除列表中在[index]索引下的数据,默认索引为最后一个元素,如果列表为空或索引超出范围,会报错 |
list.sort() | 稳定排序,默认是升序排列,可以修改bool参数reverse改为及降序排列 |
list.copy | 返回一个数据一样的新列表 |
list.index(value) | 返回value出现的第一个Index |
list.remove(value) | 删除出现的第一个value |
补充:
关键字del
使用关键字del可以删除变量,也可以删除列表中指定元素
del关键字会从内存中删除变量,删除后就不能再调用逛钙变凉了
列表的循环遍历
迭代遍历 iteration
顺序地从列表中获取数据,数据保存在item中。
for item in list:
代码块
应用场景
虽然列表可以存储不同类型的数据,但应用时,更多地是存储相同类型的数据,通过遍历进行重复操作。
元组 Tuple
元组:由多个元素组成的序列,数据之间用,分隔,索引从0开始。
与列表的区别
1)元组的元素不能修改
2)元组用()定义,
3)空元组的定义 a = ()
4) 单元素元组的定义 a = ( element, )
# 空tuple的定义
empty_tuple = ()
# 单元素元组的定义
one_tuple = (1,)
# 元组的调用
a = one_tuple[0]
元组的常用操作(方法)
元组方法 | 说明 |
---|---|
tuple.index(value) | 返回value出现的第一个Index |
tuple.cout(value) | 计算value在元组中的出现次数 |
len函数同样起作用
元组的循环遍历
for element in tuple_name:
代码块
应用场景
元组中通常保存的数据类型不同,不适合用循环遍历做重复操作
元组常用于以下三个方面:
1)函数的参数和返回值
2)格式化字符串 %()中的()就是元组
3)让列表的数据不被修改
字典
字典同样可以用于存储多个数据
通常存储用于描述一个物体的信息
和列表的区别:列表是有序的对象集合、字典是无序的对象集合
字典用大括号{}定义
字典用键值对存储数据,键值对时间用逗号,分割
voc = {key1: value1,
key2: value2,
key3: value3}
'''
键key必须是唯一的,只能是数字、字符串、元组
值value可以是任何数据类型
key是索引,value是对应值
'''
#字典的取值
voc[key1]
#字典键值对的增加
voc[key4]
#字典键值对的修改
voc[key3] = value3
字典的常用方法
太多了,没用上的先不写。
字典方法 | 说明 |
---|---|
voc.clear() | 删除字典中所有内容 |
voc.get(k [, d=none]) | 返回字典中key=k的value,如果k不在keys中,返回d |
voc.pop(k [, d=none]) | 弹出并删除字典中key=k的value,如果k不在key中,返回d或报错 |
voc.update([E, ] **F) | 用字典或可迭代序列E和F更新(合并)到voc |
voc.copy() | |
voc.items() | |
voc.popitem() | (k, v), remove and return some (key, value) pair as a 2-tuple; but raise KeyError if D is empty. |
voc.values() | |
voc.fromkeys() | |
voc.keys() | |
voc.setdefault() |
len()函数同样可以查看字典的键值对的数量。
字典的循环遍历
for key in diction:
#变量key是每次循环中获取到的key
print('diction[key]')
应用场景
字典常与列表一起使用。
字典包含一个物体的多种信息
把字典作为列表的一个元素,则列表保存了多个实例的信息
在列表遍历中可以对每个实例进行处理。
字符串
python中可以用一对单引号或一对双引号定义字符串
因为其他语言中大多用双引号定义,因此应多使用双引号。
字符串内容中如果需要用到双引号,那么在定义字符串时使用单引号。
字符串同样可以用 str[i]取值
同样可以用遍历循环。
字符串的方法
太多了,归纳有以下六类
通用方法
python内置函数
len(item) # 计算容器中的元素个数
del(item) # 删除变量
max(item) # 返回容器中元素最大值,如果是字典,只针对key比较
min(item) # 返回容器中元素最小值 如果是字典,只针对key比较
cmp(item1, item2)
# 比较两个值,-1小于/0相等/1大于, python3.x取消了该函数
切片
iteration[start_index:end_index:step]
'''
不能对字典进行比较和切片
'''
运算符
'''
列表、元组、字符串可以与乘号*运算
列表、元组、字符串可以用加号+拓展
'''
数据类型的相互转换
# list函数可以把元组转换成list
list(tuple_name)
# tuple函数可以把list转换成元组
tuple(list_name)
常用工具包
先说明对导入的工具包如何查看其帮助说明
import package
help(package)
#查看工具包的说明
help(package.function)
#查看工具包中某个函数的说明
random
随机数模块,提供一些随机数接口
random.randint(a,b) #返回[a,b]之间随机整数,包含a、b
random.choice(sequence) #随机返回sequence中的一个值
random.random() #不需要参数 返回一个参数
第一个多文件程序
1.框架搭建
准备文件:①主程序功能代码文件 ②功能函数文件
根据程序功能设计程序框架结构,对具体功能实现可以用pass关键字先占位
2.确定数据结构
3.实现各个功能函数
4.运行程序
linux上的shebang符号 #!
这个符号一般在Unix系统脚本的第一行开头使用,该符号后跟上Python解释器的完整路径(用which python 获得)
#! /usr/bin/python3
然后修改文件权限
结尾
python入门的第一部分内容就写到这里。
这部分内容包括了python简介、python基础和一个多文件程序的设计方法。
由于作者有一些C语言基础,这部分内容省略了一些内容,之后如果有相关的内容会更新到这里。
#------------------------------------------------------------------------------#
2021-5-26:补充了一些函数基础的内容,包括参数传递、参数、匿名函数。
#------------------------------------------------------------------------------#
2021-6-14:python3.10 beta版本中添加了对switch功能的支持,使用match-case语句,增加了这一内容。
#------------------------------------------------------------------------------#
最后更新于2021-6-14
说明:本文内容参考了一些视频和博客,虽然是我自己进行了整理和编辑后的内容,但如果您(原视频或博客作者)认为我的行为侵犯了您的版权,请私信联系我,核实身份后我会删除文章。