Python基础

1.基础语法

1.1 编码

默认情况下,Python 3 源码文件以 UTF-8 编码,所有字符串都是 unicode 字符串。

1.2 标识符(变量名)

  • 第一个字符必须是字母表中字母或下划线 _ 。
  • 标识符的其他的部分由字母、数字和下划线组成。
  • 标识符对大小写敏感。

1.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']

1.4 注释

单行注释
Python中单行注释以 # 开头

#!/usr/bin/python3
# 单行注释
print ("Hello, Python!") 

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

'''
第三注释
第四注释
'''

"""
第五注释
第六注释
"""

1.5 缩进(重要)

python最具特色的就是使用缩进来表示代码块,不需要使用大括号 {} 。
缩进的空格数是可变的,但是同一个代码块的语句必须包含相同的缩进空格数。

if True:
    print ("True")
else:
    print ("False")

以下代码最后一行语句缩进数的空格数不一致,会导致运行错误:

if True:
    print ("Answer")
    print ("True")
else:
    print ("Answer")
  print ("False")    # 缩进不一致,会导致运行错误 IndentationError: unindent does not match any outer indentation level

1.6 多行语句

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

total = item_one + \
        item_two + \
        item_three

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

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

1.7 其他

用户交互

默认的input输入类型都是str(字符串),如果需要可强制转换为其他类型。

a=input("请输入一个数字:")
b=int(a)
# 默认的input输入类型都是str
print("a的数据类型:",type(a))
# 强制转换为int类型
print("b的数据类型:",type(b))
---------------------------------
请输入一个数字:12
a的数据类型: <class 'str'>
b的数据类型: <class 'int'>

同一行显示多条语句

Python 可以在同一行中使用多条语句,语句之间使用分号;分割,以下是一个简单的实例:

import sys; x = 'abc'; sys.stdout.write(x)

多个语句构成代码组

缩进相同的一组语句构成一个代码块,我们称之代码组。
像if、while、def和class这样的复合语句,首行以关键字开始,以冒号( : )结束,该行之后的一行或多行代码构成代码组。
我们将首行及后面的代码组称为一个子句(clause)。
如下实例:

a=79
if a<60:
    print("成绩不合格")
elif 60<=a<80:
    print("成绩良好")
elif 80<=a<=100:
    print("成绩优秀")
else:
    print("成绩错误")

print

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

a=10
b=20
print(a,end=" ")
print(b,end=" ")
----------------
10 20 

import 与 from...import

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

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

导入sys模块

import sys

print ('命令行参数为:')
for i in sys.argv:
    print (i)
print ('\n python 路径为',sys.path)

导入 sys 模块的 argv,path 成员

from sys import argv,path  #  导入特定的成员
 
print('path:',path) # 因为已经导入path成员,所以此处引用时不需要加sys.path

2. python数据类型

Python 中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。在 Python 中,变量就是变量,它没有类型,我们所说的"类型"是变量所指的内存中对象的类型。

a="python"
b=10
c=123.45
d=[1,2.,4.,6]
print(type(a)) # str
print(type(b)) # int
print(type(c)) # float
print(type(d)) # list

多个变量赋值

# 将1赋值给a、b、c
a = b = c = 1

# 赋值不同数据类型
a, b, c = 1, 2.5, "runoob"

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

  • Number(数字)
  • String(字符串)
  • List(列表)
  • Tuple(元组)
  • Set(集合)
  • Dictionary(字典)

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

  • 不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组)。
  • 可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合)。

2.1 Number(数字)

Python3 支持 int、float、bool、complex(复数)。
在Python 3里,只有一种整数类型 int,表示为长整型,没有 python2 中的 Long

a, b, c, d = 20, 5.5, True, 4+3j

print(type(a))
print(type(b))
print(type(c)) 
print(type(d)) 
----------------------
<class 'int'>
<class 'float'>
<class 'bool'>
<class 'complex'>

注意:

  • 1、Python可以同时为多个变量赋值,如a, b = 1, 2。
  • 2、一个变量可以通过赋值指向不同类型的对象。
  • 3、数值的除法包含两个运算符:/ 返回一个浮点数,// 返回一个整数。
  • 4、在混合计算时,Python会把整型转换成为浮点数
>>> 5 + 4  # 加法
9
>>> 4.3 - 2 # 减法
2.3
>>> 3 * 7  # 乘法
21
>>> 2 / 4  # 除法,得到一个浮点数
0.5
>>> 2 // 4 # 除法,得到一个整数
0
>>> 17 % 3 # 取余
2
>>> 2 ** 5 # 乘方
32

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

示例

int float complex
10 0.0 3.14j
100 15.20 45.j
-786 -21.9 9.322e-36j
080 32.3e+18 .876j
-0490 -90. -.6545+0J
-0x260 -32.54e100 3e+26J
0x69 70.2E-12 4.53e-7j

2.2 String(字符串)

Python中的字符串用单引号 ' 或双引号 " 括起来,同时使用反斜杠 \ 转义特殊字符。
Python 字符串不能被改变。向一个索引位置赋值,比如word[0] = 'm'会导致错误。

word ="abc"

print(word[0])

# TypeError: 'str' object does not support item assignment
word[0]='c'

基本用法


str = 'Runoob'

print (str)          # 输出字符串
print (str[0:-1])    # 输出第一个到倒数第二个的所有字符
print (str[0])       # 输出字符串第一个字符
print (str[2:5])     # 输出从第三个开始到第五个的字符
print (str[2:])      # 输出从第三个开始的后的所有字符
print (str * 2)      # 输出字符串两次,也可以写成 print (2 * str)
print (str + "TEST") # 连接字符串
---------------------------------------------------------------
Runoob
Runoo
R
noo
noob
RunoobRunoob
RunoobTEST

转义字符
Python 使用反斜杠 \ 转义特殊字符,如果你不想让反斜杠发生转义,可以在字符串前面添加一个 r,表示原始字符串:

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

注意:

  • 1、反斜杠可以用来转义,使用r可以让反斜杠不发生转义。
  • 2、字符串可以用+运算符连接在一起,用*运算符重复。
  • 3、Python中的字符串有两种索引方式,从左往右以0开始,从右往左以-1开始。
  • 4、Python中的字符串不能改变。

2.3 List(列表)

  • List(列表) 是 Python 中使用最频繁的数据类型。
  • 列表可以完成大多数集合类的数据结构实现。列表中元素的类型可以不相同,它支持数字,字符串甚至可以包含列表(所谓嵌套)。
  • 列表是写在方括号 [] 之间、用逗号分隔开的元素列表。
  • 和字符串一样,列表同样可以被索引和截取,列表被截取后返回一个包含所需元素的新列表。
  • 加号 + 是列表连接运算符,星号 * 是重复操作。

基本用法

list = [ 'abcd', 786 , 2.23, 'runoob', 70.2 ]
tinylist = [123, 'runoob']

print (list)            # 输出完整列表
print (list[0])         # 输出列表第一个元素
print(list[-1])       # 输出列表最后一个元素
print (list[1:3])       # 从第二个开始输出到第三个元素
print (list[2:])        # 输出从第三个元素开始的所有元素
print (tinylist * 2)    # 输出两次列表
print (list + tinylist) # 连接列表
------------------------------------------------------
['abcd', 786, 2.23, 'runoob', 70.2]
abcd
70.2
[786, 2.23]
[2.23, 'runoob', 70.2]
[123, 'runoob', 123, 'runoob']
['abcd', 786, 2.23, 'runoob', 70.2, 123, 'runoob']

更新列表
你可以对列表的数据项进行修改或更新,你也可以使用 append() 方法来添加列表项,如下所示:

list = ['Google', 'Runoob', 1997, 2000]
 
print ("第三个元素为 : ", list[2])
list[2] = 2001
print ("更新后的第三个元素为 : ", list[2])
 
list1 = ['Google', 'Runoob', 'Taobao']
list1.append('Baidu')
print ("更新后的列表 : ", list1)
-----------------------------------------
第三个元素为 :  1997
更新后的第三个元素为 :  2001
更新后的列表 :  ['Google', 'Runoob', 'Taobao', 'Baidu']

删除列表元素
可以使用 del 语句来删除列表的的元素,如下实例:

list = ['Google', 'Runoob', 1997, 2000]
 
print ("原始列表 : ", list)
del list[2]
print ("删除第三个元素 : ", list)
----------------------------------------
原始列表 :  ['Google', 'Runoob', 1997, 2000]
删除第三个元素 :  ['Google', 'Runoob', 2000]

2.4 Tuple(元组)

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

元组使用小括号 ( ),列表使用方括号 [ ]。

元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可。

>>> tup1 = ('Google', 'Runoob', 1997, 2000)
>>> tup2 = (1, 2, 3, 4, 5 )
>>> tup3 = "a", "b", "c", "d"   #  不需要括号也可以
>>> type(tup3)
<class 'tuple'>

元组中只包含一个元素时,需要在元素后面添加逗号 , ,否则括号会被当作运算符使用:

>>> tup1 = (50)
>>> type(tup1)     # 不加逗号,类型为整型
<class 'int'>

>>> tup1 = (50,)
>>> type(tup1)     # 加上逗号,类型为元组
<class 'tuple'>

修改元组
元组中的元素值是不允许修改的,但我们可以对元组进行连接组合,如下实例:

tup1 = (12, 34.56)
tup2 = ('abc', 'xyz')
 
# 以下修改元组元素操作是非法的。
# tup1[0] = 100
 
# 创建一个新的元组
tup3 = tup1 + tup2
print (tup3)

--------------------------
(12, 34.56, 'abc', 'xyz')

删除元组
元组中的元素值是不允许删除的,但我们可以使用del语句来删除整个元组,如下实例:

tup = ('Google', 'Runoob', 1997, 2000)
 
print (tup)
del tup
print ("删除后的元组 tup : ")
print (tup)
--------------------------------------
删除后的元组 tup : 
Traceback (most recent call last):
  File "test.py", line 8, in <module>
    print (tup)
NameError: name 'tup' is not defined

2.5 Dictionary(字典)

字典是另一种可变容器模型,且可存储任意类型对象。

  • 键必须是唯一的,但值则不必。
  • 值可以取任何数据类型,但键必须是不可变的,如字符串,数字。

字典的每个键值 key=>value 对用冒号 : 分割,每个对之间用逗号(,)分割,整个字典包括在花括号 {} 中 ,格式如下所示:

d = {key1 : value1, key2 : value2, key3 : value3 }

tinydict = {'name': 'runoob', 'likes': 123, 'url': 'www.runoob.com'}
tinydict1 = { 'abc': 456 }
tinydict2 = { 'abc': 123, 98.6: 37 }

访问字典里的值

tinydict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
 
print ("tinydict['Name']: ", tinydict['Name'])
print ("tinydict['Age']: ", tinydict['Age'])
--------------------------------------------------------
tinydict['Name']:  Runoob
tinydict['Age']:  7

修改字典
向字典添加新内容的方法是增加新的键/值对,修改或删除已有键/值对如下实例:

tinydict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
 
tinydict['Age'] = 8               # 更新 Age
tinydict['School'] = "菜鸟教程"  # 添加信息
 
 
print ("tinydict['Age']: ", tinydict['Age'])
print ("tinydict['School']: ", tinydict['School'])
--------------------------------------------------------
tinydict['Age']:  8
tinydict['School']:  菜鸟教程

删除字典元素
能删单一的元素也能清空字典,清空只需一项操作。
显式删除一个字典用del命令,如下实例:

tinydict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
 
del tinydict['Name'] # 删除键 'Name'
tinydict.clear()     # 清空字典
del tinydict         # 删除字典
 
print ("tinydict['Age']: ", tinydict['Age'])
print ("tinydict['School']: ", tinydict['School'])
--------------------------------------------------
# 但这会引发一个异常,因为用执行 del 操作后字典不再存在:
Traceback (most recent call last):
  File "/runoob-test/test.py", line 9, in <module>
    print ("tinydict['Age']: ", tinydict['Age'])
NameError: name 'tinydict' is not defined

字典键的特性

  • 字典值可以是任何的 python 对象,既可以是标准的对象,也可以是用户定义的,但键不行。
  • 不允许同一个键出现两次。创建时如果同一个键被赋值两次,后一个值会被记住,前一个会被覆盖。
  • 键必须不可变,所以可以用数字,字符串或元组充当,而用列表就不行。

2.6 Set(集合)

集合(set)是一个无序的不重复元素序列。

可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。

parame = {value01,value02,...}
或者
set(value)

添加元素

  • 将元素 x 添加到集合 s 中,如果元素已存在,则不进行任何操作。
>>> thisset = set(("Google", "Runoob", "Taobao"))
>>> thisset.add("Facebook")
>>> print(thisset)
{'Taobao', 'Facebook', 'Google', 'Runoob'}

移除元素

  • 将元素 x 从集合 s 中移除,如果元素不存在,则会发生错误。
>>> thisset = set(("Google", "Runoob", "Taobao"))
>>> thisset.remove("Taobao")
>>> print(thisset)
{'Google', 'Runoob'}
>>> thisset.remove("Facebook")   # 不存在会发生错误
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'Facebook'
>>>

计算集合元素个数

>>> thisset = set(("Google", "Runoob", "Taobao"))
>>> len(thisset)
3

清空集合

>>> thisset = set(("Google", "Runoob", "Taobao"))
>>> thisset.clear()
>>> print(thisset)
set()

判断元素是否在集合中存在

>>> thisset = set(("Google", "Runoob", "Taobao"))
>>> "Runoob" in thisset
True
>>> "Facebook" in thisset
False
>>>

求两个集合的交集、并集、差集和补集

set1={1,2,3,2,5,6}
set2=set([1,2,3,8,9,9,10])

# 求set1和set2的交集
print("set1:",set1)
print("set2:",set2)
print("set1和set2的交集",(set1 & set2))
print("set1和set2的并集",(set1 | set2))
print("set1和set2的差集",(set1 - set2))
print("set2和set1的差集",(set2 - set1))
print("set1和set2的补集",(set1 ^ set2))
print("set2和set1的补集",(set2 ^ set1))
----------------------------------------
set1: {1, 2, 3, 5, 6}
set2: {1, 2, 3, 8, 9, 10}
set1和set2的交集 {1, 2, 3}
set1和set2的并集 {1, 2, 3, 5, 6, 8, 9, 10}
set1和set2的差集 {5, 6}
set2和set1的差集 {8, 9, 10}
set1和set2的补集 {5, 6, 8, 9, 10}
set2和set1的补集 {5, 6, 8, 9, 10}

3. 函数

  • 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
  • 函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。

3.1 定义一个函数

  • 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()。
  • 任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。
  • 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
  • 函数内容以冒号 : 起始,并且缩进。
  • return [表达式] 结束函数,选择性地返回一个值给调用方,不带表达式的 return 相当于返回 None。

def max(a, b):
    if a > b:
        return a
    else:
        return b
 
a = 4
b = 5
print(max(a, b))

3.2 函数调用

  • 定义一个函数:给了函数一个名称,指定了函数里包含的参数,和代码块结构。
  • 这个函数的基本结构完成以后,你可以通过另一个函数调用执行,也可以直接从 Python 命令提示符执行。
  • 如下实例调用了 printme() 函数:
# 定义函数
def printme( str ):
   # 打印任何传入的字符串
   print (str)
   return
 
# 调用函数
printme("我要调用用户自定义函数!")
printme("再次调用同一函数")
---------------------------------
我要调用用户自定义函数!
再次调用同一函数

3.3 参数传递

  • 在 python 中,类型属于对象,对象有不同类型的区分,变量是没有类型的
  • 下发代码中,[1,2,3] 是 List 类型,"Runoob" 是 String 类型,而变量 a 是没有类型,她仅仅是一个对象的引用(一个指针),可以是指向 List 类型对象,也可以是指向 String 类型对象。
a=[1,2,3]
a="Runoob"

可更改(mutable)与不可更改(immutable)对象

在 python 中,字符串, 元组, 和数字 是不可更改的对象,而 列表,字典 等则是可以修改的对象。

  • 不可变类型:变量赋值 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 传不可变对象实例

def change(a):
    print(id(a))   # 指向的是同一个对象
    a=10
    print(id(a))   # 一个新对象
 
a=1
print(id(a))
change(a)
-----------------------------------------
4379369136
4379369136
4379369424

python 传可变对象实例

  • 可变对象在函数里修改了参数,那么在调用这个函数的函数里,原始的参数也被改变了。
# 可写函数说明
def changeme( mylist ):
   "修改传入的列表"
   mylist.append([1,2,3,4])
   print ("函数内取值: ", mylist)
   return
 
# 调用changeme函数
mylist = [10,20,30]
changeme( mylist )
print ("函数外取值: ", mylist)
-----------------------------------
# 传入函数的和在末尾添加新内容的对象用的是同一个引用。
函数内取值:  [10, 20, 30, [1, 2, 3, 4]]
函数外取值:  [10, 20, 30, [1, 2, 3, 4]]

3.4 参数

必选参数

#可写函数说明
def printme( str ):
   "打印任何传入的字符串"
   print (str)
   return
 
# 调用 printme 函数,不加参数会报错
printme()
----------------------------------
Traceback (most recent call last):
  File "test.py", line 10, in <module>
    printme()
TypeError: printme() missing 1 required positional argument: 'str'

关键字参数

  • 关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值。

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

#可写函数说明
def printme( str ):
   "打印任何传入的字符串"
   print (str)
   return
 
#调用printme函数
printme( str = "菜鸟教程")

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

#可写函数说明
def printinfo( name, age = 35 ):
   "打印任何传入的字符串"
   print ("名字: ", name)
   print ("年龄: ", age)
   return
 
#调用printinfo函数
printinfo( age=50, name="runoob" )
print ("------------------------")
printinfo( name="runoob" )

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

# 可写函数说明
def printinfo( arg1, *vartuple ):
   "打印任何传入的参数"
   print ("输出: ")
   print (arg1)
   print (vartuple)
 
# 调用printinfo 函数
printinfo( 70, 60, 50 )
--------------------------
输出: 
70
(60, 50)

如果在函数调用时没有指定参数,它就是一个空元组。我们也可以不向函数传递未命名的变量。

# 可写函数说明
def printinfo( arg1, *vartuple ):
   "打印任何传入的参数"
   print ("输出: ")
   print (arg1)
   for var in vartuple:
      print (var)
   return
 
# 调用printinfo 函数
printinfo( 10 )
printinfo( 70, 60, 50 )
---------------------------
输出:
10
输出:
70
60
50

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

# 可写函数说明
def printinfo( arg1, **vardict ):
   "打印任何传入的参数"
   print ("输出: ")
   print (arg1)
   print (vardict)
 
# 调用printinfo 函数
printinfo(1, a=2,b=3)
----------------------
输出: 
1
{'a': 2, 'b': 3}

匿名函数

  • Python 使用 lambda 来创建匿名函数。
  • 所谓匿名,意即不再使用 def 语句这样标准的形式定义一个函数。
  • lambda 只是一个表达式,函数体比 def 简单很多。
  • lambda 的主体是一个表达式,而不是一个代码块。仅仅能在 lambda 表达式中封装有限的逻辑进去。
  • lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。
  • 虽然 lambda 函数看起来只能写一行,却不等同于 C 或 C++ 的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。
# 可写函数说明
sum = lambda arg1, arg2: arg1 + arg2
 
# 调用sum函数
print ("相加后的值为 : ", sum( 10, 20 ))
print ("相加后的值为 : ", sum( 20, 20 ))
------------------------------------------
相加后的值为 :  30
相加后的值为 :  40

return 语句
return [表达式] 语句用于退出函数,选择性地向调用方返回一个表达式。不带参数值的 return 语句返回 None。

# 可写函数说明
def sum( arg1, arg2 ):
   # 返回2个参数的和."
   total = arg1 + arg2
   print ("函数内 : ", total)
   return total
 
# 调用sum函数
total = sum( 10, 20 )
print ("函数外 : ", total)
------------------------------
函数内 :  30
函数外 :  30

3.5 变量

全局变量和局部变量

  • 如果想要在方法内部修改全局变量(数字或字符串或布尔值),需要加global关键字
def add(b, c):
    # 如果想要在方法内部修改全局变量,需要加global关键字
    global a
    # 可以在函数内部直接使用全局变量
    print("全局变量a:", a)
    e = a + b + c
    # 不能修改全局变量a
    a += 1
    print("全局变量a:", a)
    return e

f = add(2, 3)
print(f)
---------------
全局变量a: 10
全局变量a: 11
15
  • 如果想要在方法内部修改全局变量(列表或集合),不需要加global关键字
list1 = [1, 2, 3, 4]
def add(a, b):
    list1.append(5)
    return a + b + list1[4]
print(add(6, 7))
---------------------------
# 6+7+5
18
posted @ 2022-06-06 18:02  初夏那片海  阅读(40)  评论(0)    收藏  举报