Python笔记

近期打算认真学一学python,很早之前就看过但是一直没有毅力坚持下来,这篇笔记就当督促自己学习的动力吧!!!

一、基本知识

1,直接运行py文件

能不能像.exe文件那样直接运行.py文件呢?在Windows上是不行的,但是,在Mac和Linux上是可以的,方法是在.py文件的第一行加上一个特殊的注释:

然后,通过命令给hello.py以执行权限:

就可以直接运行hello.py了,比如在linux下运行:

2、python后台运行py程序:

说明:

1是标准输出(STDOUT)的文件描述符,2是标准错误(STDERR)的文件描述符

1> /usr/local/nginx/server/logs/easyQAsystem.log 简化为 > /usr/local/nginx/server/logs/easyQAsystem.log,表示把标准输出重定向到/usr/local/nginx/server/logs/easyQAsystem.log这个文件
2>&1 表示把标准错误重定向到标准输出,这里&1表示标准输出

为什么需要将标准错误重定向到标准输出的原因,是因为标准错误没有缓冲区,而STDOUT有。
这就会导致 commond > python.log 2> python.log 文件python.log被两次打开,而STDOUT和
STDERR将会竞争覆盖,这肯定不是我门想要的。好了,我们现在可以直接关闭shell窗口(我用的是SecureCRT,用的比较多的还有Xshell),而不用再输入exit这个命令来退出。

3、Python代码格式

 以#开头的语句是注释,注释是给人看的,可以是任意内容,解释器会忽略掉注释。其他每一行都是一个语句,当语句以冒号:结尾时,缩进的语句视为代码块。

 缩进有利有弊。好处是强迫你写出格式化的代码,但没有规定缩进是几个空格还是Tab。按照约定俗成的管理,应该始终坚持使用4个空格的缩进。

4、列表list

列表是动态的,长度大小不固定,可以随意地增加、删减或者改变元素(mutable)。

1)python列表就像数组,内存中使用堆栈进行存储。

movies=['The Holy Grail','The Life of Brain','The Meaning of Life']
print(type(movies))

movies类型为<class 'list'>

2)列表基本操作

可以使用[]加下标进行访问列表成员(下标从0开始);

使用len(列表名)获取列表长度;

列表末尾增加一个数据项append(param);

从列表末尾删除一个数据线pop();

在列表末尾增加一个数据项集合extend(params);

在列表中删除一个指定的数据项remove(param);

在列表指定位置前增加一个数据项insert(0,param);

3)列表推导式书写形式:  

[表达式 for 变量 in 列表]    或者  [表达式 for 变量 in 列表 if 条件]

5、元组tuple

元组是静态的,长度大小固定,无法增加删减或者改变(immutable)。

1)常见内置函数

可以通过 list() 和 tuple() 函数对列表和元组进行相互转换:

count(item) 表示统计列表 / 元组中 item 出现的次数。

index(item) 表示返回列表 / 元组中 item 第一次出现的索引。

list.reverse() 和 list.sort() 分别表示原地倒转列表和排序(注意,元组没有内置的这两个函数)。

reversed() 和 sorted() 同样表示对列表 / 元组进行倒转和排序,reversed() 返回一个倒转后的迭代器(上文例子使用 list() 函数再将其转换为列表);sorted() 返回排好序的新列表。

2)列表和元组的使用场景

(1)如果存储的数据和数量不变,比如你有一个函数,需要返回的是一个地点的经纬度,然后直接传给前端渲染,那么肯定选用元组更合适。

(2)如果存储的数据或数量是可变的,比如社交平台上的一个日志功能,是统计一个用户在一周之内看了哪些用户的帖子,那么则用列表更合适。

6、字典dict和集合set

1)字典

字典是一系列由键(key)和值(value)配对组成的元素的集合。相比于列表和元组,字典的性能更优,特别是对于查找、添加和删除操作,字典都能在常数时间复杂度内完成。

字典访问可以直接索引键,如果不存在,就会抛出异常。也可以使用 get(key, default) 函数来进行索引。如果键不存在,调用 get() 函数可以返回一个默认值。比如下面这个示例,返回了'null'。

2)集合

集合和字典基本相同,唯一的区别,就是集合没有键和值的配对,是一系列无序的、唯一的元素组合。

集合并不支持索引操作,因为集合本质上是一个哈希表,和列表不一样。想要判断一个元素在不在字典或集合内,我们可以用 value in dict/set 来判断。 

3)对字典或者集合进行操作

 除了创建和访问,字典和集合也同样支持增加、删除、更新等操作。

不过要注意,集合的 pop() 操作是删除集合中最后一个元素,可是集合本身是无序的,你无法知道会删除哪个元素,因此这个操作得谨慎使用。

对于字典,我们通常会根据键或值,进行升序或降序排序:

而对于集合,其排序和前面讲过的列表、元组很类似,直接调用 sorted(set) 即可,结果会返回一个排好序的列表。

7、字符串

字符串是由独立字符组成的一个序列,通常包含在单引号('')双引号("")或者三引号之中(''' '''或""" """,两者一样)。Python 的字符串同样支持索引,切片和遍历等等操作。

1)字符串常见函数split()

字符串的分割函数 split()。string.split(separator),表示把字符串按照 separator 分割成子字符串,并返回一个分割后子字符串组合的列表。

2)字符串常见函数format()

 string.format(),就是所谓的格式化函数;而大括号{}就是所谓的格式符,用来为后面的真实值——变量 预留位置。

不过要注意,string.format() 是最新的字符串格式函数与规范。自然,我们还有其他的表示方法,比如在 Python 之前版本中,字符串格式化通常用 % 来表示,那么上述的例子,就可以写成下面这样:

3)字符串常见函数replace()

Python 中字符串的改变,通常只能通过创建新的字符串来完成。

4)字符串加法操作符和 join 函数

 Python 中字符串是不可变的(前面所讲的新版本 Python 中拼接操作’+='是个例外)。因此,随意改变字符串中字符的值,是不被允许的。

8、异常处理

通常来说,在程序中,如果我们不确定某段代码能否成功执行,往往这个地方就需要使用异常处理。我们所说的异常处理,通常使用 try 和 except 来解决。

1)处理异常

except block 只接受与它相匹配的异常类型并执行,如果程序抛出的异常并不匹配,那么程序照样会终止并退出。其中一种解决方案,是在 except block 中加入多种异常的类型。每次程序执行时,except block 中只要有一个 exception 类型与实际匹配即可。不过,很多时候,我们很难保证程序覆盖所有的异常类型,所以,更通常的做法,是在最后一个 except block,声明其处理的异常类型是 Exception。Exception 是其他所有非系统异常的基类,能够匹配任意非系统异常。或者,你也可以在 except 后面省略异常类型,这表示与任意异常相匹配(包括系统异常等)。

2)用户自定义异常

实际工作中,如果内置的异常类型无法满足我们的需求,或者为了让异常更加详细、可读,想增加一些异常类型的其他功能,我们可以自定义所需异常类型。不过,大多数情况下,Python 内置的异常类型就足够好了。

  

 

 

二、常见问题解决

1、pip: failed to create process.解决方法

昨天在使用pip过程,pip提示:failed to create process。

解决方法:python -m pip install xxx 就可以了

如以matplotlib为例即:python -m pip install matplotlib 即可安装成功

2、reload() 用于重新载入之前载入的模块。

import imp
imp.reload(module)

 

posted @   权杖攻城狮  阅读(393)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?
点击右上角即可分享
微信分享提示

目录导航