Yukyukuon / blog

博客的文章
1 stars 0 forks source link

Python简明教程 #11

Open Yukyukuon opened 3 years ago

Yukyukuon commented 3 years ago

近来进入了实验室,开始学习ML,DL方面的知识。奈何语言学校混了太久,太久没编程。打算先把Python不同于之前学习过的语言的语法通过Python简明教程这篇文档过一遍,此文记录学习过程。

基本语法

format方法

Python2.6 开始,新增了一种格式化字符串的函数 str.format() ,它增强了字符串格式化的功能。 \ 基本语法是通过 {}: 来代替以前的 % 。 format 函数可以接受不限个参数,位置可以不按顺序。


>>>"{} {}".format("hello", "world")    # 不设置指定位置,按默认顺序
'hello world'

>>> "{0} {1}".format("hello", "world")  # 设置指定位置
'hello world'

>>> "{1} {0} {1}".format("hello", "world")  # 设置指定位置
'world hello world'

print("网站名:{name}, 地址 {url}".format(name="菜鸟教程", url="www.runoob.com"))
网站名:菜鸟教程, 地址 www.runoob.com

转义序列

需要转义的内容前面加 \ ,只能使用转移序列 \\ 表示反斜杠本身。

函数

Python定义函数:

可变参数

有时候你可能想要定义一个能接收 任意个 数参数的函数。例如定义一个参数个数可变的函数,你可以通过使用星号 * 来实现这个功能。

def total(a=5, *numbers, **phonebook):
    print('a', a)

    # 遍历元组中的所有项
    for single_item in numbers:
        print('single_item', single_item)

    # 遍历字典中的所有项
    for first_part, second_part in phonebook.items():
        print(first_part,second_part)

print(total(10,1,2,3,Jack=1123,John=2231,Inge=1560))

结果

python function_varargs.py
a 10
single_item 1
single_item 2
single_item 3
Inge 1560
John 2231
Jack 1123
None

模块

在其他的程序中复用写的大量的函数时,使用模块。 Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句。 模块让你能够有逻辑地组织你的 Python 代码段。

import语句用来做模块的导入 from...import语句可以从模块中导入一个指定的部分到当前命名空间中 (避免使用)

字节码文件 .pyc

导入模块是一个相对而言开销较大的操作,因此,Python 试用了一些手段来使得导入模块的操作更加快速。其中一个方法,就是创建以 .pyc 为扩展名的 字节码 文件,它是一种中间形式,Python 会把程序代码转换成这样的形式(你还记得在 介绍章节 中说过 Python 是怎么运行的吗?)。当你下一次想要在另外一个程序代码中导入模块的时候,这个 .pyc 文件就很有用 —— 导入操作会很快完成,这是因为导入模块所必须的一部分操作已经被事先完成了。此外,这些字节码文件都是平台无关的。

注意:这些 .pyc 文件一般会被创建在与它对应的 .py 文件相同的文件目录下。如果 Python 没有在该文件夹下写文件的权限,那么 .pyc 文件将不会被创建。

# virtualenv和conda 原文链接:https://blog.csdn.net/zhouchen1998/article/details/84671528 #### 1.什么是virtualenv(venv) 这是一个虚拟环境管理器,作为非数据科学领域的开发者来说是很实用的。它可以让你每个项目甚至每个脚本配置一个自定义的Python解释器环境,这最大的好处是我可以不污染开发环境。 - 举个例子,我有个项目是专门写爬虫的,那么我可能需要requests,bs4,lxml,pyspider,scrapy等包或者框架,此时我还有个项目我想要写点GUI界面,主要使用的包是pyqt,如果在原生的python解释器环境里面,我不得不把这个GUI包(对于我爬虫项目可能永远不会涉及使用)放到下载的包里面。 - 这不只是看着不舒服(不考虑反复去卸载包),久而久之,你的开发环境可能会变得很庞大,因为里面堆积了很多垃圾包(你基本上不会再使用了),很多配置文件,难以寻觅,这对计算机是莫大的伤害。 - 但是venv则可以创建任意多个虚拟环境,你只要指定当前环境那么pip安装的包就只会在这个环境下,这个环境和你的操作系统部署的python环境是隔离的。这有两个好处。 1.首先,我可以分门别类常见虚拟环境,互不污染。(如机器学习和爬虫不干涉) 2.其次,一旦我不使用了,可以直接删除虚拟环境,而不用管各种文件残留,关联问题了。 #### 2.什么是pip pip 是 Python 最常用的包管理器,该工具提供了对Python 包的查找、下载、安装、卸载的功能。它能自动处理依赖 。(linux开发者曾今对此深恶痛绝知道yum的出现)一般pip是解释器自带的,当然也可以安装。pip的出现使得类似java那样第三方包较难管理的局面消失(当然java也可以方便处理了)。主要的安装包使用方法为命令行执行pip install packagename,当然,后面提到的conda也具有包管理器功能,安装包命令为conda install packagename。 #### 3.什么是conda venv和conda的区别不大,主要区别如下 - 如果说venv是虚拟环境管理器,pip是包管理器,那么conda则是两者的结合。 - 遗憾的是conda的包管理器做的一般且会安装过多依赖如TensorFlow自动安装cudnn(在主机配置了cudnn的情况下),大多数时候还是使用pip安装包。 - 但是,注意,**pip只能安装Python的包,conda可以安装一些工具软件,即使这些软件不是基于Python开发的。** - 但是conda的虚拟环境管理还是可以的,一般使用venv会在该项目下创建虚拟环境,再不济也会在项目下创建venv的文件夹(含配置文件),当然pycharm下创建虚拟环境另说;然而conda每个虚拟环境不会占用项目文件夹的空间,它创建在用户设定的一个位置,这使得多个项目共享一个虚拟环境更加方便(只是方便,venv也是可以的,但是venv一般占用项目文件夹空间,而且venv命令行使用具有局限性)。 - conda虚拟环境是独立于操作系统解释器环境的,即无论操作系统解释器什么版本(哪怕2.7),我也可以指定虚拟环境python版本为3.6(见文章开头所说原博客),而venv是依赖主环境的。 - 对于科学计算和大数据领域的人,conda是环境自动集成了numpy这样的主流科学计算包的,venv每个包都要自行下载。 conda有图形化环境管理器,venv没有。(虽然开发人员几乎不用图形界面conda) # 一些笔记 ``` Python os.chdir() ``` 语法为os.chdir(path)用于改变当前工作目录到指定的路径,参数path,要切换到的新路径。 ``` Python os.mkdir(path) os.makedirs(path) os.rmdir(path) os.removdirs(path) os.remov(path) ``` 在Python中可以使用os.mkdir()函数创建目录(创建一级目录)。 可以使用os.makedirs()函数创建多级目录。 使用os.rmdir()函数删除目录。 使用os.removedirs()函数删除多级目录。 使用os.remove()函数删除文件(注意一定是一个文件)。 ## Python 推导式 Python 推导式是一种独特的数据处理方式,可以从一个数据序列构建另一个新的数据序列的结构体。Python 支持各种数据结构的推导式: - 列表(list)推导式 - 字典(dict)推导式 - 集合(set)推导式 - 元组(tuple)推导式 ### 列表推导式 从可迭代对象中取一个(满足条件的)元素,把它传入表达式进行计算后,放在列表里。 ``` Python [表达式 for 变量 in 列表] [out_exp_res for out_exp in input_list] 或者 [表达式 for 变量 in 列表 if 条件] [out_exp_res for out_exp in input_list if condition] ``` - **out_exp_res**:列表生成元素表达式,可以是有返回值的函数。 - **for out_exp in input_list**:迭代 input_list 将 out_exp 传入到 out_exp_res 表达式中。 - **if condition:条件语句**,可以过滤列表中不符合条件的值。 - 用法1:用于转换数据 ``` Python my_list = [1, 2, 3] new_list = [item * 2 for item in my_list] print(new_list) ``` - 用法2:用于过滤数据 ``` Python my_list = [1, 2, 3] new_list = [item for item in my_list if item > 1] print(new_list) ```