Python基础

一、基本语法

1.行与缩进

python使用缩进来表示代码块,不适用大括号

2.多行语句

反斜杠换行

3.数字类型

python有四种数字类型:

int:只有一种整数类型int 表示长整型

bool: true

float:浮点数 1.23

complex:复数 1.1+2.2j

4.字符串

python单引号和双引号使用完全相同

使用三引号(''' 或 """)可以指定一个多行字符串。

转义符

字符串 +链接 *运算符重复

字符串有两种索引方式,从左往右以 0 开始,从右往左以 -1 开始

没有单独的字符类型,一个字符就是长度为 1 的字符串

字符串的截取的语法格式如下:变量[头下标:尾下标:步长]

str[1:5:2]是指每隔一个字符(步长2)输出从第二个字符到第六个字符

5.同行显示多条语句

可以在同一行执行多条语句,语句之间分号分割

6.import 与 from...import

将整个模块(somemodule)导入,格式为: import somemodule

从某个模块中导入某个函数,格式为: from somemodule import somefunction

二、基本数据类型

python中变量无需声明,但是使用前必须赋值,赋值后才会被创建

变量就是变量,没有类型,python中类型是指变量所指向的内存中对象的类型

1.多变量赋值

2.标准数据类型

Number(数字)

String(字符串)

bool (布尔)

List (列表)

Tuple (元组)

Set (集合)

Dictionary (字典)

Python3 的六个标准数据类型中:

不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组);

可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合)

3.Number(数字)

python3有int float bool complex(复数)

python3 int就是长整型 python2中有Long 3中没有

可通过type()函数查询对象类型

bool是int子类 True和False可以相加

4.List(列表)

列表可以完成大多数集合类的数据结构实现。列表中元素的类型可以不相同,它支持数字,字符串甚至可以包含列表(所谓嵌套)。

列表是写在方括号 [] 之间、用逗号分隔开的元素列表。

和字符串一样,列表同样可以被索引和截取,列表被截取后返回一个包含所需元素的新列表。

列表截取的语法格式如下:

变量[头下标:尾下标]

5.Tuple(元组)

元组与列表相似,不同之处在于元组元素不能修改,元组写在小括号立,逗号隔开

下标啥的跟List和String一样

虽然tuple的元素不可改变,但它可以包含可变的对象,比如list列表

string、list 和 tuple 都属于 sequence(序列)

创建空元组和一个元素的元组:

python 复制代码
tup1 = ()    # 空元组
tup2 = (20,) # 一个元素,需要在元素后添加逗号

6.Set(集合)

Python 中的集合(Set)是一种无序、可变的数据类型,用于存储唯一的元素。

集合中的元素不会重复,并且可以进行交集、并集、差集等常见的集合操作

创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。

7.Dictionary(字典)

列表是有序的对象集合,字典是无序的对象集合。两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。

字典是一种映射类型,字典用 { } 标识,它是一个无序的 键(key) : 值(value) 的集合。

类似java的map

三、数据类型转换

隐式转换

自动将一种数据类型转换为另一种数据类型

当对不同数据类型进行运算,较低数据类型(整数)会转换为较高数据类型(浮点数),避免数据丢失。

显式转换

使用int() float() str()等预定义函数进行显示类型转换

int(x [,base])

将x转换为一个整数

float(x)

将x转换到一个浮点数

complex(real [,imag])

创建一个复数

str(x)

将对象 x 转换为字符串

repr(x)

将对象 x 转换为表达式字符串

eval(str)

用来计算在字符串中的有效Python表达式,并返回一个对象

tuple(s)

将序列 s 转换为一个元组

list(s)

将序列 s 转换为一个列表

set(s)

转换为可变集合

dict(d)

创建一个字典。d 必须是一个 (key, value)元组序列。

frozenset(s)

转换为不可变集合

chr(x)

将一个整数转换为一个字符

ord(x)

将一个字符转换为它的整数值

hex(x)

将一个整数转换为一个十六进制字符串

oct(x)

将一个整数转换为一个八进制字符串

四、运算符

算数运算符

** 幂,返回x的y次幂

/ 除,这个结果是带小数的!!!

// 取整除-往小的方向取整数

其余加减乘跟其他语言一样

比较运算符

==等于 !=不等于 <小于 >大于 <=小于等于 >=大于等于

赋值运算符

= += -=之类的跟java一样

python3.8新增海象运算符 := 可以在表达式内部为变量赋值

位运算符

按位运算符是把数字看作二进制来进行计算的

a&b:按位与

a|b:按位或

a^b:异或 同0异1

~a:按位取反

<<:左移 高位丢弃 低位补0

/>>:右移

逻辑运算符

a and b: a b都为true返回true

a or b:a或b为true返回true

not a:取反

成员运算符

a in b:a在b序列中返回true

a not in b:a不在b序列中返回true

身份运算符

a is b:a是否和b引用的是同一个对象 类似id(a)==id(b)

a is not b:啊是否和b引用的是不同对象

五、条件控制和循环语句

条件控制

if语句

if condition_1:

statement_block_1

elif condition_2:

statement_block_2

else:

statement_block_3

match...case

python3.10新增

java 复制代码
match subject:
    case <pattern_1>:
        <action_1>
    case <pattern_2>:
        <action_2>
    case <pattern_3>:
        <action_3>
    case _:
        <action_wildcard>

case _: 类似于 C 和 Java 中的 default:,当其他 case 都无法匹配时,匹配这条,保证永远会匹配成功。

循环语句

while循环

java 复制代码
while 判断条件(condition):
    执行语句(statements)......

如果 while 后面的条件语句为 false 时,则执行 else 的语句块。

java 复制代码
while <expr>:
    <statement(s)>
else:
    <additional_statement(s)>

for循环

java 复制代码
for <variable> in <sequence>:
    <statements>
else:
    <statements>

遍历列表:

遍历字符串:

计数:

range()函数

range(stop)

range(start, stop[, step])

参数说明:

start: 计数从 start 开始。默认是从 0 开始。例如 range(5) 等价于 range(0, 5)

stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是 [0, 1, 2, 3, 4] 没有 5

step:步长,默认为 1。例如:range(0, 5) 等价于 range(0, 5, 1)


六、推导式

推导式是一种独特的数据处理方式,可以从一个数据序列构建另一个新的数据序列的结构体

列表推导式

java 复制代码
[表达式 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]

只保留长度大于三的字符串,并且转换为大写

字典推导式

java 复制代码
{ key_expr: value_expr for value in collection }

或

{ key_expr: value_expr for value in collection if condition }

以列表的值为key,值的长度为value创建字典

集合推导式

java 复制代码
{ expression for item in Sequence }
或
{ expression for item in Sequence if conditional }

元组推导式

java 复制代码
(expression for item in Sequence )
或
(expression for item in Sequence if conditional )

组推导式和列表推导式的用法也完全相同,只是元组推导式是用 () 圆括号将各部分括起来,而列表推导式用的是中括号 [],另外元组推导式返回的结果是一个生成器对象。

a是一个生成器对象 需要通过tuple转换成元组来打印

七、迭代器和生成器

迭代器

迭代器是访问集合元素的一种形式

迭代器是一个可以记住遍历的位置的对象。

迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。

迭代器有两个基本的方法:iter() 和 next()。

字符串,列表或元组对象都可用于创建迭代器:

生成器

在 Python 中,使用了 yield 的函数被称为生成器(generator)。

yield 是一个关键字,用于定义生成器函数,生成器函数是一种特殊的函数,可以在迭代过程中逐步产生值,而不是一次性返回所有结果。

跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。

当在生成器函数中使用 yield 语句时,函数的执行将会暂停,并将 yield 后面的表达式作为当前迭代的值返回。

然后,每次调用生成器的 next() 方法或使用 for 循环进行迭代时,函数会从上次暂停的地方继续执行,直到再次遇到 yield 语句。这样,生成器函数可以逐步产生值,而不需要一次性计算并返回所有结果。

调用一个生成器函数,返回的是一个迭代器对象。

使用yiled实现斐波那契数列:

八、函数

你可以定义一个由自己想要功能的函数,以下是简单的规则:

函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()。

任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。

函数的第一行语句可以选择性地使用文档字符串---用于存放函数说明。

函数内容以冒号 : 起始,并且缩进。

return [表达式] 结束函数,选择性地返回一个值给调用方,不带表达式的 return 相当于返回 None。

前面都有例子,不再赘述

可更改(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 种参数不同,声明时不会命名。

java 复制代码
def functionname([formal_args,] *var_args_tuple ):
   "函数_文档字符串"
   function_suite
   return [expression]

加了星号 * 的参数会以元组(tuple)的形式导入,存放所有未命名的变量参数。

加了两个星号 ** 的参数会以字典的形式导入

参考链接:菜鸟教程

相关推荐
雨颜纸伞(hzs)9 分钟前
C语言介绍
c语言·开发语言·软件工程
J总裁的小芒果11 分钟前
THREE.js 入门(六) 纹理、uv坐标
开发语言·javascript·uv
1.01^100013 分钟前
[1111].集成开发工具Pycharm安装与使用
python·pycharm
HEX9CF14 分钟前
【Django】测试带有 CSRF 验证的 POST 表单 API 报错:Forbidden (CSRF cookie not set.)
python·django·csrf
坊钰40 分钟前
【Java 数据结构】移除链表元素
java·开发语言·数据结构·学习·链表
chenziang11 小时前
leetcode hot100 LRU缓存
java·开发语言
时雨h1 小时前
RuoYi-ue前端分离版部署流程
java·开发语言·前端
凡人的AI工具箱1 小时前
每天40分玩转Django:实操多语言博客
人工智能·后端·python·django·sqlite
Py办公羊大侠1 小时前
Excel批量设置行高,Excel表格设置自动换行后打印显示不全,Excel表格设置最合适的行高后打印显示不全,完美解决方案!!!
python·excel·打印·openpyxl·自动换行·显示不全
PieroPc1 小时前
Python tkinter写的《电脑装配单》和 Html版 可打印 可导出 excel 文件
python·html·电脑