【Python】基础(学习笔记)

一、Python介绍

1、Python优点

学习成本低

开源

适应⼈群⼴泛

应⽤领域⼴泛

2、Python解释器

Python解释器作用:运行Python文件

Python解释器分类

CPython:C语⾔开发的解释器[官⽅],应⽤⼴泛的解释器。

IPython:基于CPython的⼀种交互式解释器。

PyPy:基于Python语⾔开发的解释器。

Jython:运⾏在Java平台的解释器,直接把Python代码编译成Java字节码执⾏。

IronPython:运⾏在微软.Net平台上的Python解释器,可以直接把Python代码编译成.Net的字节码。

3、PyCharm

PyCharm是⼀种Python IDE(集成开发环境)

1)PyCharm新建⽂件

项⽬管理空⽩位置 — 右键 – New – PythonFile

2)运⾏⽂件

代码内部 — 右键 – Run

3)修改代码⽂字格式

[fifile] – [Settings]/[Default Settings] – [Editor] – [Font]

4)Debug⼯具

断点位置:⽬标要调试的代码块的第⼀⾏代码即可,即⼀个断点即可。

打断点的⽅法:单击⽬标代码的⾏号右侧空⽩位置,在⽂件内部任意位置 — 右键 – Debug’⽂件名’ — 即可调出Debug⼯具⾯板 – 单击StepOver/F8,即可按步执⾏代码。

Debug输出⾯板:
Debugger显示变量和变量的细节
Console:输出内容

4、查看python版本

cmd --> Python3 -V

二、Python基础语法

1、编码

Python 3 源码文件以 UTF-8 编码,所有字符串都是 unicode 字符串

2、标识符

  1. 第一个字符必须是字母表中字母或下划线 _
  2. 标识符的其他的部分由字母、数字和下划线组成
  3. 标识符对大小写敏感
  4. 可以用中文作为变量名

3、保留字

保留字即关键字,我们不能把它们用作任何标识符名称。

Python 的标准库提供了一个 keyword 模块,可以输出当前版本的所有关键字

>>> import keyword
>>> keyword.kwlist
['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']

4、注释

Python中单行注释以 # 开头

# 第一个注释
print ("Hello, Python!") # 第二个注释

多行注释可以用多个 #号,还有 '''"""

# 第一个注释
# 第二个注释'''
第三注释
第四注释
'''"""
第五注释
第六注释
"""

5、行与缩进

缩进的空格数是可变的,但是同一个代码块的语句必须包含相同的缩进空格数

6、多行语句

Python 通常是一行写完一条语句,但如果语句很长,我们可以使用反斜杠 \ 来实现多行语句

total = item_one + \item_two + \item_three

在 [], {}, 或 () 中的多行语句,不需要使用反斜杠 \

total = ['item_one', 'item_two', 'item_three','item_four', 'item_five']

7、空行

函数之间或类的方法之间用空行分隔,表示一段新的代码的开始。类和函数入口之间也用一行空行分隔,以突出函数入口的开始。

空行与代码缩进不同,空行并不是 Python 语法的一部分。书写时不插入空行,Python 解释器运行也不会出错。但是空行的作用在于分隔两段不同功能或含义的代码,便于日后代码的维护或重构。

空行也是程序代码的一部分。

8、同一行显示多条语句

Python 可以在同一行中使用多条语句,语句之间使用分号 ; 分割

name = 'wmh'; print(name)

9、多个语句构成代码组

缩进相同的一组语句构成一个代码块,我们称之代码组。

像if、while、def和class这样的复合语句,首行以关键字开始,以冒号( : )结束,该行之后的一行或多行代码构成代码组。

我们将首行及后面的代码组称为一个子句(clause)

10、print 输出

print 默认输出是换行的,如果要实现不换行需要在变量末尾加上 end=""

x="a"
y="b"
# 换行输出
print( x )
print( y )print('---------')
# 不换行输出
print( x, end=" " )
print( y, end=" " )
print()

11、import 与 from…import

在 python 用 import 或者 from...import 来导入相应的模块。

  1. 将整个模块(somemodule)导入,格式为: import somemodule
  2. 从某个模块中导入某个函数,格式为: from somemodule import somefunction
  3. 从某个模块中导入多个函数,格式为: from somemodule import firstfunc, secondfunc, thirdfunc
  4. 将某个模块中的全部函数导入,格式为: from somemodule import *

三、数据类型

1、赋值

Python 中的变量不需要声明。但每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。

在 Python 中,变量就是变量,它没有类型,我们所说的"类型"是变量所指的内存中对象的类型。

一个变量可以通过赋值指向不同类型的对象。

等号(=)用来给变量赋值。

a = 'wmh'
print(a)

Python允许你同时为多个变量赋值

a = b = c = 1

可以为多个对象指定多个变量

a, b, c = 1, 2, "runoob"

交换两变量的值

a,b = b,a

2、标准数据类型

  1. Number(数字)
  2. String(字符串)
  3. List(列表)
  4. Tuple(元组)
  5. Set(集合)
  6. Dictionary(字典)

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

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

3、Number(数字)

Python3 支持 int、float、bool、complex(复数)

  • 整型(int):不分正负但不带小数点。Python3 整型是没有限制大小的,所以 Python3 没有 Python2 的 Long 类型。布尔(bool)是整型的子类型。
  • 浮点型(float):浮点型由整数部分与小数部分组成,可以用科学计数法表示(2.5e2 = 2.5 x 102 = 250)
  • 复数(complex):复数由实数部分和虚数部分构成,可以用a + bj,或者complex(a,b)表示, a和b都是浮点型。

可以用十六进制和八进制来代表整数

>>> number = 0xA0F	# 十六进制
>>> number
2575>>> number=0o37 	# 八进制
>>> number
31

内置的 type() 函数可以用来查询变量所指的对象类型

>>> a, b, c, d = 20, 5.5, True, 4+3j
>>> print(type(a), type(b), type(c), type(d))
<class 'int'> <class 'float'> <class 'bool'> <class 'complex'>

可以用 isinstance 来判断

>>> a = 111
>>> isinstance(a, int)
True

sinstance 和 type 的区别在于:

  • type()不会认为子类是一种父类类型
  • isinstance()会认为子类是一种父类类型

Python3 中,bool 是 int 的子类,True 和 False 可以和数字相加,True==1False==0会返回 True,但可以通过 is 来判断类型。

issubclass(bool, int) 	# True
True==1					# True
False==0				# True
True+1					# 2
False+1					# 1
1 is True				# False
0 is False				# False

del语句删除单个或多个对象

del var
del var_a, var_b

Python还支持复数,复数由实数部分和虚数部分构成,可以用a + bj,或者complex(a,b)表示, 复数的实部a和虚部b都是浮点型

在交互模式中,最后被输出的表达式结果被赋值给变量 _

类似于jQuery中的$

>>> 1 + 2
3
>>> _
3

4、String(字符串)

字符串:单引号 ' 或双引号 " 括起来,同时使用反斜杠 \ 转义特殊字符。

变量[头下标:尾下标:步长]		# 字符串分片(左闭右开)

索引值:从左往右以0开始,从右往左以-1开始

+运算符连接在一起,用*运算符重复

print (str * 2)      # 输出字符串两次,也可以写成 print (2 * str)
print (str + "TEST") # 连接字符串

使用反斜杠 \ 转义特殊字符

\r:回车,将 \r 后面的内容移到字符串开头,并逐一替换开头部分的字符,直至将 \r 后面的内容完全替换完成

>>> print('google runoob taobao\r123456')
123456 runoob taobao

在字符串前面添加一个 r,表示原始字符串

>>> print('Ru\noob')
Ru
oob
>>> print(r'Ru\noob')
Ru\noob

反斜杠(\)可以作为续行符,表示下一行是上一行的延续。也可以使用 """...""" 或者 '''...''' 跨越多行。

字符串格式化输出

print ("我叫 %s 今年 %d 岁!" % ('小明', 10))
符号描述
%c格式化字符及其ASCII码
%s格式化字符串
%d格式化整数
%f格式化浮点数字,可指定小数点后的精度

f-string输出

>>> name = 'Runoob'
>>> f'Hello {name}'  # 替换变量
'Hello Runoob'>>> x = 1
>>> print(f'{x+1=}')   # Python 3.8
x+1=2

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

与 C 字符串不同的是,Python 字符串不能被改变。向一个索引位置赋值,word[0] = 'm'会导致错误。

5、List(列表)

列表中元素的类型可以不相同,它支持数字,字符串与列表嵌套

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

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

变量[头下标:尾下标:步长]		# 列表分片

索引值:从左往右以0开始,从右往左以-1开始

+运算符连接在一起,用*运算符重复

列表中的元素是可以改变的

删除列表元素:del list[2]

列表比较

import operatora = [1, 2]
b = [2, 3]
c = [2, 3]
print("operator.eq(a,b): ", operator.eq(a,b))	# False
print("operator.eq(c,b): ", operator.eq(c,b))	# True

6、Tuple(元组)

与列表类似,不同之处在于元组的元素不能修改。

所谓元组的不可变指的是元组所指向的内存中的内容不可变

重新赋值的元组变量,绑定到了新的对象,不是修改了原来的对象了

元组写在小括号 () 里,元素之间用逗号隔开

元组也可以被索引和切片,也可以使用+操作符进行拼接

可以把字符串看作一种特殊的元组

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

构造包含 0 个或 1 个元素的元组比较特殊,所以有一些额外的语法规则

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

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

7、Set(集合)

集合(set):由一个或数个形态各异的大小整体组成的

构成集合的事物或对象称作元素或是成员

基本功能:进行成员关系测试和删除重复元素

可以使用大括号 { } 或者 set() 函数创建集合

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

parame = {value01,value02,...}
set(value)sites = {'Google', 'Taobao', 'Runoob', 'Facebook', 'Zhihu', 'Baidu'}print(sites)   # 输出集合,重复的元素被自动去掉# 成员测试
if 'Runoob' in sites :print('Runoob 在集合中')
else :print('Runoob 不在集合中')# set可以进行集合运算
a = set('abracadabra')
b = set('alacazam')print(a - b)     # a 和 b 的差集
{'r', 'b', 'd'}print(a | b)     # a 和 b 的并集
{'b', 'c', 'a', 'z', 'm', 'r', 'l', 'd'}print(a & b)     # a 和 b 的交集
{'c', 'a'}print(a ^ b)     # a 和 b 中不同时存在的元素
{'z', 'b', 'm', 'r', 'l', 'd'}

1)添加元素

添加元素:s.add( x )

添加元素、列表、元组、字典:s.update( x )

x 可以有多个,用逗号分开

2)移除元素

不存在报错:s.remove( x )

不存在不报错:s.discard( x )

随机删一个:s.pop()

set 集合的 pop 方法会对集合进行无序的排列,然后将这个无序排列集合的左面第一个元素进行删除

3)其他操作

计算集合元素个数:len(s)

清空集合:s.clear()

判断元素是否在集合中存在:x in s

8、Dictionary(字典)

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

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

键(key)必须使用不可变类型。

键必须不可变,所以可以用数字,字符串或元组充当,而用列表就不行

在同一个字典中,键(key)必须是唯一的。

创建时如果同一个键被赋值两次,后一个值为准

注:dict 作为 Python 的关键字和内置函数,变量名不建议命名为 dict

dict = {}
dict['one'] = "123"
dict[2]     = "456"print (dict['one'])			# 输出键为 'one' 的值
print (dict[2])				# 输出键为 2 的值
print (dict)          		# 输出完整的字典
print (dict.keys())   		# 输出所有键
print (dict.values()) 		# 输出所有值

创建空字典使用 {}

修改字典

tinydict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}tinydict['Age'] = 8					# 更新 Age
tinydict['School'] = "No.1"			# 添加信息

9、隐式类型转换

较低数据类型(整数)就会转换为较高数据类型(浮点数)以避免数据丢失

10、显式类型转换

int() 强制转换为整型

x = int(1)   	# x 输出结果为 1
y = int(2.8) 	# y 输出结果为 2
z = int("3") 	# z 输出结果为 3

float() 强制转换为浮点型

x = float(1)     # x 输出结果为 1.0
y = float(2.8)   # y 输出结果为 2.8
z = float("3")   # z 输出结果为 3.0
w = float("4.2") # w 输出结果为 4.2

str() 强制转换为字符串类型

x = str("s1") 	# x 输出结果为 's1'
y = str(2)   	# y 输出结果为 '2'
z = str(3.0)  	# z 输出结果为 '3.0'
函数描述
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)将一个整数转换为一个八进制字符串

四、推导式

1、什么是推导式

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

  • 列表(list)推导式
  • 字典(dict)推导式
  • 集合(set)推导式
  • 元组(tuple)推导式

2、列表推导式

[表达式 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:条件语句,可以过滤列表中不符合条件的值。

过滤掉长度小于或等于3的字符串列表,并将剩下的转换成大写字母

>>> names = ['Bob','Tom','alice','Jerry','Wendy','Smith']
>>> new_names = [name.upper() for name in names if len(name)>3]
>>> print(new_names)
['ALICE', 'JERRY', 'WENDY', 'SMITH']

计算 30 以内可以被 3 整除的整数

>>> multiples = [i for i in range(30) if i % 3 == 0]
>>> print(multiples)
[0, 3, 6, 9, 12, 15, 18, 21, 24, 27]

3、字典推导式

{ key_expr: value_expr for value in collection }{ key_expr: value_expr for value in collection if condition }

提供三个数字,以三个数字为键,三个数字的平方为值来创建字典

>>> dic = {x: x**2 for x in (2, 4, 6)}
>>> dic
{2: 4, 4: 16, 6: 36}

4、集合推导式

{ expression for item in Sequence }{ expression for item in Sequence if conditional }

判断不是 abc 的字母并输出

>>> a = {x for x in 'abracadabra' if x not in 'abc'}
>>> a
{'d', 'r'}
>>> type(a)
<class 'set'>

5、元组推导式

(expression for item in Sequence )(expression for item in Sequence if conditional )

元组推导式和列表推导式的用法也完全相同,只是元组推导式是用 () 圆括号将各部分括起来,而列表推导式用的是中括号 []

元组推导式返回的结果是一个生成器对象

>>> a = (x for x in range(1,10))
>>> a
<generator object <genexpr> at 0x7faf6ee20a50>  # 返回的是生成器对象>>> tuple(a)       # 使用 tuple() 函数,可以直接将生成器对象转换成元组
(1, 2, 3, 4, 5, 6, 7, 8, 9)

五、运算符

1、算数运算符

运算符说明
+加 - 两个对象相加
-减 - 得到负数或是一个数减去另一个数
*乘 - 两个数相乘或是返回一个被重复若干次的字符串
/除 - x 除以 y
%取模 - 返回除法的余数
**幂 - 返回x的y次幂
//取整除 - 向下取接近商的整数

2、比较运算符

运算符描述实例
==等于 - 比较对象是否相等(a == b) 返回 False。
!=不等于 - 比较两个对象是否不相等(a != b) 返回 True。
>大于 - 返回x是否大于y(a > b) 返回 False。
<小于 - 返回x是否小于y。(a < b) 返回 True。
>=大于等于 - 返回x是否大于等于y。(a >= b) 返回 False。
<=小于等于 - 返回x是否小于等于y。(a <= b) 返回 True。

所有比较运算符返回1表示真,返回0表示假。这分别与特殊的变量True和False等价。

3、赋值运算符

运算符描述实例
=赋值运算符c = a + b 将 a + b 的运算结果赋值为 c
+=加法赋值运算符c += a 等效于 c = c + a
-=减法赋值运算符c -= a 等效于 c = c - a
*=乘法赋值运算符c *= a 等效于 c = c * a
/=除法赋值运算符c /= a 等效于 c = c / a
%=取模赋值运算符c %= a 等效于 c = c % a
**=幂赋值运算符c **= a 等效于 c = c ** a
//=取整除赋值运算符c //= a 等效于 c = c // a

:= 海象运算符

可在表达式内部为变量赋值。(Python3.8 版本新增运算符)

List = ['r','e','x','h','a','o']
for i in range(Len := len(List)):print(List[i],end="")
# rexhao

4、位运算符(摆烂)

运算符描述实例
&按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0(a & b) 输出结果 12 ,二进制解释: 0000 1100
|按位或运算符:只要对应的二个二进位有一个为1时,结果位就为1。(a | b) 输出结果 61 ,二进制解释: 0011 1101
^按位异或运算符:当两对应的二进位相异时,结果为1(a ^ b) 输出结果 49 ,二进制解释: 0011 0001
~按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1。~x 类似于 -x-1(~a ) 输出结果 -61 ,二进制解释: 1100 0011, 在一个有符号二进制数的补码形式。
<<左移动运算符:运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补0。a << 2 输出结果 240 ,二进制解释: 1111 0000
>>右移动运算符:把">>“左边的运算数的各二进位全部右移若干位,”>>"右边的数指定移动的位数a >> 2 输出结果 15 ,二进制解释: 0000 1111

5、逻辑运算符

运算符逻辑表达式描述实例
andx and y布尔"与" - 如果 x 为 False,x and y 返回 x 的值,否则返回 y 的计算值。(a and b) 返回 20。
orx or y布尔"或" - 如果 x 是 True,它返回 x 的值,否则它返回 y 的计算值。(a or b) 返回 10。
notnot x布尔"非" - 如果 x 为 True,返回 False 。如果 x 为 False,它返回 True。not(a and b) 返回 False

6、成员运算符

运算符描述实例
in如果在指定的序列中找到值返回 True,否则返回 False。x 在 y 序列中 , 如果 x 在 y 序列中返回 True。
not in如果在指定的序列中没有找到值返回 True,否则返回 False。x 不在 y 序列中 , 如果 x 不在 y 序列中返回 True。

7、身份运算符

运算符描述实例
isis 是判断两个标识符是不是引用自一个对象x is y, 类似 id(x) == id(y) , 如果引用的是同一个对象则返回 True,否则返回 False
is notis not 是判断两个标识符是不是引用自不同对象x is not y , 类似 id(x) != id(y)。如果引用的不是同一个对象则返回结果 True,否则返回 False。

id():获取对象内存地址。

is 与 == 区别:is 用于判断两个变量引用对象是否为同一个, == 用于判断引用变量的值是否相等。

8、运算符优先级

运算符描述
(expressions...),[expressions...], {key: value...}, {expressions...}圆括号的表达式
x[index], x[index:index], x(arguments...), x.attribute读取,切片,调用,属性引用
await xawait 表达式
**乘方(指数)
+x, -x, ~x正,负,按位非 NOT
*, @, /, //, %乘,矩阵乘,除,整除,取余
+, -加和减
<<, >>移位
&按位与 AND
^按位异或 XOR
``
in,not in, is,is not, <, <=, >, >=, !=, ==比较运算,包括成员检测和标识号检测
not x逻辑非 NOT
and逻辑与 AND
or逻辑或 OR
if -- else条件表达式
lambdalambda 表达式
:=赋值表达式

Pyhton3 已不支持 <> 运算符

六、分支

1、if

Python 中用 elif 代替了 else if,所以if语句的关键字为:if - elif - else

使用缩进来划分语句块,相同缩进数的语句在一起组成一个语句块。

在Python中没有switch – case语句。

2、while

在 Python 中没有 do…while 循环

使用 CTRL+C 来退出死循环

支持while - else语句,break跳出不执行else

3、for

for 循环用来遍历任何可迭代对象

break 语句用于跳出当前循环体

range(起始值, 结束值, 步长):创建数字序列

4、pass

pass是空语句,是为了保持程序结构的完整性。

pass 不做任何事情,一般用做占位语句(空着会报错)

5、迭代器

1)迭代器概述

迭代:用来访问集合(字符串,列表或元组对象)元素

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

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

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

list=[1,2,3,4]
it1 = iter(list)    # 创建迭代器对象
print (next(it1))   # 输出迭代器的下一个元素
# 1it2 = iter(list)    # 创建迭代器对象
for x in it2:print (x, end="")
# 1234

2)迭代器创建

把一个类作为一个迭代器使用需要在类中实现两个方法 __iter__()__next__()

__iter__() 返回一个特殊的迭代器对象, 这个迭代器对象实现了 __next__() 并通过 StopIteration 异常标识迭代的完成

__next__() 会返回下一个迭代器对象

创建一个返回数字的迭代器,初始值为 1,逐步递增 1

class MyNumbers:def __iter__(self):self.a = 1return selfdef __next__(self):x = self.aself.a += 1return xmyclass = MyNumbers()
myiter = iter(myclass)print(next(myiter))

3)StopIteration

StopIteration 异常用于标识迭代的完成,防止出现死循环

import sys         # 引入 sys 模块list=[1,2,3,4]
it = iter(list)    # 创建迭代器对象while True:try:print (next(it))except StopIteration:sys.exit()

__next__()方法中我们可以设置在完成指定循环次数后触发 StopIteration 异常来结束迭代

class MyNumbers:def __iter__(self):self.a = 1return selfdef __next__(self):if self.a <= 20:x = self.aself.a += 1return xelse:raise StopIterationmyclass = MyNumbers()
myiter = iter(myclass)for x in myiter:print(x)

6、生成器

生成器:使用了 yield 的函数

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

在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行 next() 方法时从当前位置继续运行

# 使用 yield 实现斐波那契数列
import sysdef fibonacci(n): 		# 生成器函数 - 斐波那契a, b, counter = 0, 1, 0while True:if (counter > n): returnyield aa, b = b, a + bcounter += 1
f = fibonacci(10) 		# f 是一个迭代器,由生成器返回生成while True:try:print (next(f), end=" ")except StopIteration:sys.exit()

七、函数

1、定义函数

def 函数名(参数列表):函数体

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

2、传参

1)值传递和引用传递

类型属于对象,对象有不同类型的区分,变量是没有类型的

  • **不可变类型:**类似 C++ 的值传递,如整数、字符串、元组。
  • **可变类型:**类似 C++ 的引用传递,如 列表、字典。

python 中一切都是对象,严格意义我们不能说值传递还是引用传递,我们应该说传不可变对象和传可变对象

2)必需参数

必需参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样

3)关键字参数

关键字参数允许函数调用时参数的顺序与声明时不一致,解释器能够用参数名匹配参数值

def printinfo( name, age ):print ("名字: ", name)print ("年龄: ", age)returnprintinfo( age=50, name="wmh" )

4)默认参数

调用函数时,如果没有传递参数,则会使用默认参数

def printinfo( name, age = 35 ):print ("名字: ", name)print ("年龄: ", age)returnprintinfo( name="wmh" )

5)不定长参数

你可能需要一个函数能处理比当初声明时更多的参数。这些参数叫做不定长参数,和上述 2 种参数不同,声明时不会命名。

def functionname([formal_args,] *var_args_tuple ):function_suitereturn [expression]

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

def printinfo( arg1, *vartuple ):print (arg1)print (vartuple)returnprintinfo( 70, 60, 50 )
# 70
# (60, 50)

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

def printinfo( arg1, **vardict ):print ("输出: ")print (arg1)print (vardict)returnprintinfo(1, a=2,b=3)
# 1
# {'a': 2, 'b': 3}

参数中星号 * 可以单独出现

def f(a,b,*,c):return a+b+c
f(1,2,3)   # 报错
f(1,2,c=3) # 正常

3、匿名函数

使用 lambda 来创建匿名函数

lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数

虽然 lambda 函数看起来只能写一行,却不等同于 C 或 C++ 的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率

lambda [arg1 [,arg2,.....argn]]:expression
sum = lambda a,b: a + b
sum(1,2)	# 3

4、强制位置参数

Python3.8 新增了一个函数形参语法 / 用来指明函数形参必须使用指定位置参数,不能使用关键字参数的形式

def f(a, b, /, c, d, *, e, f):print(a, b, c, d, e, f)return
f(10, 20, 30, d=40, e=50, f=60)			# 对
f(10, b=20, c=30, d=40, e=50, f=60)		# 错:b 不能使用关键字参数的形式
f(10, 20, 30, 40, 50, f=60)				# 错:e 必须使用关键字参数的形式

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/143767.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

为RabbitMQ配置SSL

1. 安装 OpenSSL 从 OpenSSL 的官方网站&#xff08;https://www.openssl.org/&#xff09;下载 OpenSSL 工具的 Windows 版本&#xff0c;并安装。 2. 创建 SSL 证书和私钥 执行以下命令以生成私钥文件&#xff08;.key&#xff09;和证书签名请求文件&#xff08;.csr&…

Spring中有哪几种方法获取HttpSession对象

Spring MVC 可以直接作为Controller的参数传入&#xff1a; RequestMapping(value "/test", method RequestMethod.POST, produces "application/json;charsetUTF-8")ResponseBodypublic Map test(HttpSession session, String otherParam) {//TODOre…

线性代数理解笔记

一.向量引入: 向量&#xff1a;只由大小和方向决定&#xff0c;不由位置决定。 二.向量加减法 向量的加法是首尾相连&#xff0c;减法是尾尾相连。 而向量v向量w为平行四边形主对角线。 向量v-向量w为平行四边形副对角线。 2.向量内积点乘&#xff08;内积&#xff09; 内积…

Java --- JVM之StringTable

目录 一、String的基本特性 二、String的内存分配 2.1、String内存分布图 三、字符串拼接操作 3.1、字符串拼接操作底层原理 3.2、拼接操作与append操作效率对比 四、intern()方法 4.1、intern()效率 五、StringTable的垃圾回收 一、String的基本特性 1、String字符…

MR外包团队:MR、XR混合现实技术应用于游戏、培训,心理咨询、教育成为一种创新的各行业MR、XR形式!

随着VR、AR、XR、MR混合现实等技术逐渐应用于游戏开发、心理咨询、培训、教育各个领域&#xff0c;为教育、培训、心理咨询等行业带来了全新的可能性。MR、XR游戏开发、心理咨询是利用虚拟现实技术模拟真实场景&#xff0c;让学生身临其境地参与学习和体验&#xff0c;从而提高…

为什么UI自动化难做?—— 关于Selenium UI自动化的思考

在快速迭代的产品、团队中&#xff0c;UI自动化通常是一件看似美好&#xff0c;实际“鸡肋”&#xff08;甚至绝大部分连鸡肋都算不上&#xff09;的工具。原因不外乎以下几点&#xff1a; 1 效果有限 通常只是听说过&#xff0c;就想去搞UI自动化的团队&#xff0c;心里都认…

SpringSecurity6从入门到上天系列第六篇:解决这个问题为什么在引入SpringSecurity之后所有的请求都需要先做登录认证才可以进行访问呢

文章目录 问题引入 1&#xff1a;问题阐述 2&#xff1a;问题分析 一&#xff1a;从SpringBoot的自动装配 1&#xff1a;SpringBootApplication介绍 2&#xff1a;自动装配的核心方法 3&#xff1a;核心方法的调用路径 4&#xff1a;SpringSecurity核心配置 5&#xf…

总结1057

考研倒计38天 极限冲刺day1 今日共计学习13h33m&#xff0c;为了能走出备考的低谷阶段&#xff0c;来一场与自我的较量。在尽可能保证效率的情况下&#xff0c;玩命干。考研这件事&#xff0c;从来不是因为看到了希望才去努力&#xff0c;而是玩命努力后才看到希望。

蒙HarmonyOS从零实现类微信app效果第二篇,我的+发现页面实现

本着不拖更的原则&#xff0c;今天上新了&#xff0c;今天实现了类微信app的发现页和我的页面。先看效果。 效果是不是看着还不错。其实这两个页面功能实现还是比较简单的&#xff0c;接下来还是老规矩&#xff0c;先进行页面的拆分和代码实现&#xff0c;然后进行相关我认为比…

ElementPlus el-switch开关页面初始化时,change事件自动触发

解决方案&#xff1a; //在el-switch外层包一个盒子 不使用el-switch自带的 change 事件 //盒子上面添加一个 click 点击事件&#xff0c;通过点击事件来改变el-switch的状态 <div click"switchChange"><el-switch v-model"value1" /> </d…

vue和react项目中实现 px 转 vm

vue和react项目中实现 px 转 vm vue中配置 1、下载插件 npm i postcss-px-to-viewport2、vue项目配置 const { defineConfig } require(vue/cli-service); const AutoImport require(unplugin-auto-import/webpack); const Components require(unplugin-vue-components/…

2023年亚太杯APMCM数学建模大赛数据分析题MySQL的使用

2023年亚太杯APMCM数学建模大赛 以2022年C题全球变暖数据为例 数据分析&#xff1a; 以2022年亚太杯数学建模C题为例&#xff0c;首先在navicat建数据库然后右键“表”&#xff0c;单击“导入向导”&#xff0c;选择对应的数据格式及字符集进行数据导入 导入之后&#xff0c…

前端面试题之性能优化篇

懒加载 图片懒加载 懒加载的概念 懒加载也叫延迟加载&#xff0c;按需加载&#xff0c;指在长网页中延时加载图片数据&#xff0c;是一种比较好的网页性能优化的方式。在比较长的网页或应用中&#xff0c;如果图片加载很多&#xff0c;所有图片都加载出来&#xff0c;而用户…

c# 字符串转化成语音合成,System.Speech

C# 语音合成可以使用 System.Speech.Synthesis 命名空间中的 SpeechSynthesizer 类来实现。SpeechSynthesizer 类提供了一系列方法和属性&#xff0c;可以用来控制语音合成的过程&#xff0c;包括设置语音、音调、语速等。 下面是一个简单的示例&#xff0c;用来演示如何使用 …

[量子计算与量子信息] 2.1 线性代数

2.1 线性代数 符号对照表 量子力学中&#xff0c;向量使用 ∣ ψ ⟩ \ket \psi ∣ψ⟩ (ket)来表示&#xff0c;可以理解为一个列向量。其对偶向量为 ⟨ ψ ∣ \bra \psi ⟨ψ∣ &#xff0c;可以理解为行向量。 向量空间中零向量直接用 0 0 0 表示&#xff0c; ∣ 0 ⟩ \…

[100天算法】-目标和(day 79)

题目描述 给定一个非负整数数组&#xff0c;a1, a2, ..., an, 和一个目标数&#xff0c;S。现在你有两个符号 和 -。对于数组中的任意一个整数&#xff0c;你都可以从 或 -中选择一个符号添加在前面。返回可以使最终数组和为目标数 S 的所有添加符号的方法数。示例&#xff…

卸载本地开发环境,拥抱容器化开发

以前在公司的时候&#xff0c;使用同事准备的容器化环境&#xff0c;直接在 Docker 内进行开发&#xff0c;爽歪歪呀。也是在那时了解了容器化开发的知识&#xff0c;可惜了&#xff0c;现在用不到那种环境了。所以打算自己在本地也整一个个人的开发环境&#xff0c;不过因为我…

S-Clustr(影子集群) 重磅更新!黑入工业PLC设备!

公告 项目地址:https://github.com/MartinxMax/S-Clustr 更新预告内容进度SIEMENS S7-200 SMART远程控制进行中 开发人员Blog联系方式提交时间提交内容授权情况ASH_HHhttps://blog.csdn.net/m0_53711047/article/details/133691537?spm1001.2014.3001.5502匿名2023-10-16 2…

USB复合设备构建CDC+HID鼠标键盘套装

最近需要做一个小工具&#xff0c;要用到USB CDCHID设备。又重新研究了一下USB协议和STM32的USB驱动库&#xff0c;也踩了不少坑&#xff0c;因此把代码修改过程记录一下。 开发环境&#xff1a; ST-LINK v2 STM32H743开发板 PC windows 11 cubeMX v6.9.2 cubeIDE v1.13.2 cub…

Feature Pyramid Networks for Object Detection(2017.4)

文章目录 Abstract1. Introduction3. Feature Pyramid NetworksBottom-up pathwayTop-down pathway and lateral connections 7. Conclusion FPN Abstract 特征金字塔是识别系统中检测不同尺度物体的基本组成部分。但最近的深度学习对象检测器避免了金字塔表示&#xff0c;部分…