一、基本语法
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)的形式导入,存放所有未命名的变量参数。
加了两个星号 ** 的参数会以字典的形式导入
参考链接:菜鸟教程