Python:基础语法

Python:基础语法

一、常量和表达式

我们可以把 Python 当成一个计算器, 来进行一些算术运算.

可以使用 + - * / ( ) 等运算符进行算术运算. 先算乘除, 后算加减.

运算符和数字之间, 可以没有空格, 也可以有多个空格. 但是一般习惯上写一个空格(比较美观).

print(1 + 2 - 3) print(1 + 2 * 3) print(1 + 2 / 3) 
表达式:1+2-3

表达式返回值:运算结果

字面值常量:1、2、3  

运算符或操作符:+ - * /  **(平方) 

 (1)熟悉 C / Java 的知道, 2 / 3 结果为 0 (小数部分被截断). 但是在 Python 中得到的结果则是 一个小数. 更符合日常使用的直觉.

(2)编程中没有“四舍五入”的规则,浮点数遵照IEEE754标准规则,会有微小误差 

二、变量和类型

2.1 变量的语法

      有的时候, 我们需要进行的计算可能更复杂一些, 需要把一些计算的中间结果保存起来. 这个时候就需要用到变量 ——>可以被视为一块用来存储数据的盒子

举例:

 (1)定义变量

硬性规则(务必遵守) :

1、变量名由数字字母下划线构成.

2、数字不能开头.

3、变量名不能和 "关键字" 重复.

4、变量名大小写敏感. num 和 Num 是两个不同的变量名.
软性规则(建议遵守)

1、给变量命名的时候,尽量用描述性的单词来表示,尽量通过名字来表现出变量的作用

2、当我们使用一个单词描述不清楚的时候,可以用多个单词来命名,不怕变量名字长,而怕变量的含义表达不清楚

   当包含多个单词时,命名有多种规范

(1)驼峰命名——除了第一个单词的首字母外,后续每个单词的首字母都大写

(2)蛇形命名——单词之间使用下划线_来进行分割

——>至于选用哪一种,一般公司都会有明确的编程规范

(2)使用变量 

 2.2 变量的类型 

变量类型:对于不同的变量做区分 

         Python中的变量的类型,不需要在定义变量的时候显式声明,而只是依靠初始化语句,根据初始化的值的类型来进行确定的。

(1)int

 在Python中,int能够表示的数据范围是 “无穷”的

——>int可以根据表示数据的大小来自动扩容。 

——>因此Python里没有long、short这样的类型

(2) float

  Python中的float就是双精度浮点数

——>等同于C++/Java里的double

(3)字符串

 Python要求使用引号把一系列字符引起来,就构成了字符串。

——>Python并没有char这种类型,引用‘ ’或者“ ”都是可以的

 问题1:为什么‘ ’和“ ”都可以,难道不是多次一举吗??

——>其实他们组合在一起时可以起到划分的作用的!!如以下例子:

 问题2:字符串拼接问题

但是字符串和数字是不能这样拼接的!!

问题3:Python的报错情况

——>(1)语法错误,在程序运行之前,Python解释器就能把错误识别出来。

       (2)运行错误,在程序运行之前,识别不了,必须要执行到对应的代码中才能发现问题。 

(4)布尔类型

布尔类型是一个特殊的类型, 取值只有两种, True (真) 和 False (假).  

PS: 布尔类型也是数学上的一个概念. 我们初中就学过一个概念叫做 "命题" , 进一步的就可以判定 命题的真假.  

(5)其他 

除了上述类型之外, Python 中还有 list, tuple, dict, 自定义类型 等等

2.3 类型的意义 

1、不同的类型,占用内存空间是不同的

int默认是4个字节,但是会动态扩容

float固定8个字节

bool是1个字节

string是变长的 

2、不同的类型,对应能够进行的操作也是不同的

int、float   ——>  可以+ - * /   但是不能用len

str  ——> 可以+ 和使用len     但不可以- * /                          

2.4 动态类型

1、静态类型:程序运行过程中,变量的类型适中不变

比如C++和Java 创建变量的类型是一开始就决定好的 

2、动态类型:程序运行过程中,变量的类型可能会发生改变

其实py作为一个动态类型的语言,在定义变量的时候也是可以写类型的!!

       但是一个编程语言是否是动态类型,只是取决于进行时他的类型是否发生改变,并不取决于变量定义的时候是否声明类型!! ——>所以这里的声明并不影响他的特性,但是声明类型可以增加可读性

3、 动态类型写法比较灵活,提高了语言的表达能力,但是在编程中,“灵活”这个词往往是贬义词,因为这代表更容易出错,尤其是在大型程序的多人协作开发中(比如a提供的代码难以被b理解)。

    因此很多公司,在创业之初喜欢用Python来做开发(因为产品规模小,只需要一两个程序员就可以完成),但是当项目达到一定规模之后,动态类型的劣势就逐渐体现出来了,很多公司会针对之前Python写的代码使用其他语言进行重构!! 

三、注释 

3.1 什么是注释

         写代码是一件烧脑的事情,但是读代码也同样非常烧脑,所以注释作为一种特殊的代码,在不会影响到程序执行的同时还能够起到解释说明的作用,帮助程序员理解代码运行的逻辑!!

         一般来说,开头的注释一般是写在要注释的代码的上方,也有少数情况下要写在注释代码的右侧,很少会写在代码的下方,更不会写到代码的左侧!! 

3.2 注释的语法

Python中有两种风格的注释

(1)注释行  ——>使用#开头的行都是注释

# 这是一行注释.

  (2)   文档字符串——>使用三引号('''或“””)引起来 

""" 这是文档字符串 这是文档字符串 """

特点:

一般放在函数、文件、类的开头

可以包含多行内容

和#的区别是可以被Python解释器识别,就可以方便通过其他工具来看到文档字符串的内容

3.3 注释的规范

1、注释的内容,必须是准确的,起到误导作用的注释还不如不写!!

2、公司中的项目经常要进行“迭代” ,一旦需要更新代码,也务必要记得更新注释!! 

3、篇幅合理,既不要太精简,也不要长篇大论

4、使用中文,但是一些外企可能会要求英文

5、内容要积极向上,不能有负能量 !(早年虾米音乐的  “穷逼vip”)

3.4 如何批量注释代码?

1、选中要注释的代码

2、ctrl+ /

四、输入输出交互

4.1 控制台

程序需要和用户进行交互.

用户把信息传递给程序的过程, 称为 "输入".

程序把结果展示给用户的过程, 称为 "输出".

 输入输出的最基本的方法就是控制台(人与计算机交互的最基础方式)

 这些对于机械的操作面板,就叫做控制台,控制台上会有一些按钮,开关,操作杆……

后来又了计算机之后,控制台的概念也就延续下来了……

只不过计算机是通过键盘鼠标等进行操作,把操作结果显示到屏幕上……

——>计算机里,就把用户能输入命令向计算机安排工作,计算机再把结果显示出来,这样的程序就被称为控制台!!

——>但是在日常生活中却不常用,更常见的交互方式是图形化界面 (如我们平时用到的 QQ, 浏览器, steam 等, 都不需要用户输入命令,而只是通过鼠标点击窗口点击按钮的方式来操作.

4.2 输出print

Python 使用 print 函数输出到控制台 不仅能输出一个字符串, 还可以输出一个其他类型的变量

更多的时候, 我们希望能够输出的内容是混合了字符串和变量的.  

4.3 输入input

python 使用 input 函数, 从控制台读取用户的输入

 

五、运算符

5.1 算数运算符

 像 + - * / % ** // 这种进行算术运算的运算符, 称为 算术运算符

1、除法的第一个问题:除0错误

 这种运行时出现的错误也叫做“抛出异常”

如果程序运行中抛出异常,程序直接就终止了,异常的代码后面也不会执行

2、除法的第二个问题: 截断

整数除以整数,如果除不尽得到的会是小数,不会出现截断的情况

// 是取整除法  会“向下取整” 

5.2 关系运算符

 像 < >= == != 这一系列的运算符称为 关系运算符, 它们是在比较操作数之间的关系.

 

运算符不光可以比较数字,还可以根据字典序比较字符串!! 

C和Java不用==和!=比较字符串(小众) 

浮点数用==可能存在风险 

 思考:这种误差难道真的不会造成影响吗??

——>理论会影响,但是工程角度基本可以忽略不计!

5.3 逻辑运算符

 像 and or not 这一系列的运算符称为 逻辑运算符

and 并且. 两侧操作数均为 True, 最终结果为 True. 否则为 False. (一假则假)

or 或者. 两侧操作数均为 False, 最终结果为 False. 否则为 True. (一真则真)

not 逻辑取反. 操作数本身为 True, 则返回 False. 本身为 False, 则返回 True.

Python支持连续>和< 

 短路求值   

5.4 赋值运算符 

 赋值,左侧必须是变量,右侧必须是数据   ——>相当于把右侧的数据填充到左侧的空间中

 链式赋值(不推荐)

 多元赋值(少用,但可以不创建第三个变量的情况下交换变量,因为赋值是同时进行的)

 5.5 复合赋值运算符

 Python 还有一些 复合赋值运算符. 例如 += -= *= /= %=

 5.6 其他...

      除了上述之外, Python 中还有一些运算符, 比如 身份运算符 (is, is not), 成员运算符 (in, not in), 位运算符 ( & | ~ ^ >) 等.

六、扩展 

 

Read more

排序算法指南:归并排序(非递归)

排序算法指南:归并排序(非递归)

前言:              非递归实现归并排序,通常被称为 “自底向上”(Bottom-Up) 的归并排序,与递归版本(先将数组对半拆分直到只剩一个元素,再通过递归栈回溯合并)不同,非递归版本直接从最小的子数组(长度为1)开始,两两合并,然后长度翻倍(2, 4, 8 ...),直到合并完整个数组。                                                                 一、归并排序非递归的核心思路          递归算法转换为非递归实现主要有两种常见方法:          1.使用栈结构模拟递归过程          2.将递归逻辑改写为循环结构          1.1 栈模拟失效          如果仅通过栈结构模拟递归过程,我们只能够做到拆分数组,而不能做到合并数组。          假设我们要排序数组 arr = [8, 4, 5, 7],下标是 0 到 3。          初始状态:栈中有任务 [0, 3]。                   第一步:弹

By Ne0inhk
Python APP反爬实战:Frida+Charles抓包,破解签名校验

Python APP反爬实战:Frida+Charles抓包,破解签名校验

做爬虫做到APP层面,你会发现网页反爬的那套思路完全失效:用Charles抓包能看到请求参数,但sign/appSign这类签名参数始终是乱码;手动拼接参数模拟请求,服务端直接返回“签名验证失败”;甚至换了代理、改了设备信息,还是过不了服务端的校验——这就是APP反爬的核心壁垒:签名校验。 我经手过电商APP价格爬取、短视频APP数据采集、物流APP轨迹抓取等数十个APP反爬项目,从最初的“抓包改参数被秒拒”,到后来用Frida Hook脱壳获取签名密钥,再到Python还原签名算法实现稳定爬取,踩过的坑能帮新手少走一年弯路。这篇文章全程聚焦“实战”:从APP签名校验的底层逻辑,到Charles抓包定位参数,再到Frida Hook破解签名算法,最后用Python实现完整爬取,每个步骤都附可直接复制的生产级代码,新手也能跟着搞定99%的APP签名反爬。 一、先搞懂:APP签名校验的核心逻辑(为什么普通抓包没用) 新手先别着急装工具,搞懂签名校验的原理,才能精准破解——这是APP反爬的“命门”,也是服务端验证请求合法性的核心手段。 1.1 APP反爬 vs 网页反爬:核心差异

By Ne0inhk
基于Python的近红外光谱数据预处理与特征筛选——以哈密瓜品质检测为例

基于Python的近红外光谱数据预处理与特征筛选——以哈密瓜品质检测为例

目录 * 一、引言 * 二、研究背景 * 三、数据集 * 四、预处理算法 * (1)原始光谱读取 * (2)趋势校正(Detrending, DT) * (3)标准正态变换(Standard Normal Variate, SNV) * (4)多元散射校正(Multiplicative Scatter Correction, MSC) * (5)卷积平滑(Savitzky-Golay smoothing, SG) * (6)一阶导数(First Derivative, FD) * (7)光谱预处理结果 * 五、特征筛选算法 * (1)竞争自适应重加权(Competitive Adaptive Reweighted Sampling, CARS) * (2)无信息变量消除算法(

By Ne0inhk
Python 纯函数编程:从理念到实战的完整指南

Python 纯函数编程:从理念到实战的完整指南

Python 纯函数编程:从理念到实战的完整指南 引言:当函数式编程遇见 Python 在我十多年的 Python 开发生涯中,我见证了无数项目因为代码复杂度失控而陷入泥潭。调试时,你永远不知道一个函数会修改哪些全局状态;测试时,你需要费尽心思构造各种环境;并发时,你担心数据竞争导致诡异的 bug。直到我深入理解了纯函数的理念,这一切才豁然开朗。 纯函数(Pure Function)并非 Python 独有的概念,它源自函数式编程范式。但在 Python 这样的多范式语言中,纯函数思想能与面向对象、过程式编程完美融合,帮助我们写出更健壮、更易维护的代码。今天,我想通过实战案例,带你深入理解纯函数的本质,以及它如何让你的 Python 代码脱胎换骨。 一、纯函数的本质:可预测的代码世界 1.1 什么是纯函数? 纯函数必须满足两个核心特征: 特征一:相同输入必定产生相同输出 # 纯函数示例defadd(a,

By Ne0inhk