a=9
print('a的除法运算=',a/2)
print('a的整除运算=',a//2)#整除运算是向下取整
print('a的加法运算=',a+2)
print('a的乘法运算=',a*2)
print('a的类型',type(a))
a的除法运算= 4.5 a的整除运算= 4 a的加法运算= 11 a的乘法运算= 18 a的类型 <class 'int'>
a=11.5
print('a的除法运算\n a/2=',a/2)
print('a的整除运算\n a//2=',a//2)#整除运算是向下取整,但不一定是整型
print('a的加法运算\n a+2=',a+2)
print('a的乘法运算\n a*2=',a*2)
print('a的类型',type(a))
a的除法运算 a/2= 5.75 a的整除运算 a//2= 5.0 a的加法运算 a+2= 13.5 a的乘法运算 a*2= 23.0 a的类型 <class 'float'>
a='这是第一个字符串'
b=' 这是第二个字符串'
a*2#字符串乘法运算
'这是第一个字符串这是第一个字符串'
a+b#字符串加法运算
'这是第一个字符串 这是第二个字符串'
print(' '+a+'\n',a[0],a[1])#字符串里面的元素可以用下标表示,下标从0开始是正序,也就是原顺序。
这是第一个字符串 这 是
print(' '+a+'\n',a[-1],a[-2],a[-3])#字符串里面的元素可以用下标表示,下标从-1开始是反序,也就是倒序。
这是第一个字符串 串 符 字
1>2
False
2>1
True
a=[i for i in range(5)]
a
[0, 1, 2, 3, 4]
b =[True,False,True,False,True]
b
[True, False, True, False, True]
[i for i ,i2 in zip (a,b) if i2 ]#这个列表推导式有点难,但可以更快的了解布尔选择
[0, 2, 4]
list( zip(a,b))
[(0, True), (1, False), (2, True), (3, False), (4, True)]
[ i for i in zip(a,b)]
[(0, True), (1, False), (2, True), (3, False), (4, True)]
b = [True,False,True,False,True]
a = [i for i in range(5)]
for i,i2 in zip(a,b):#zip打包函数
if i2:
print(i)
0 2 4
实部用整型或者浮点术数,虚部用整型或者浮点术加上J或者j表示(但是浮点数会出现计算错误)
a=4+1j
b=4.1+1J
c=4.0+1j
d=2/3 + 5j
e=2/3 + 3/5j
a,b,c,d,e
((4+1j), (4.1+1j), (4+1j), (0.6666666666666666+5j), (0.6666666666666666-0.6j))
a+b
(8.1+2j)
a*b
(15.399999999999999+8.1j)
a/b
(0.9769792251544077+0.005614823133071288j)
(1)创建方式:可以通过多种方式创建bytes对象。例如,可以直接传递一个整数列表给bytes()函数,或者使用fromhex类方法从十六进制字符串创建一个bytes对象。
b'I love python',bytes("I love python", encoding='utf-8')
(b'I love python', b'I love python')
bytes([11, 22, 33]),b'2662',b'\x00\x01\x02\x03\x04',b'\t\r\nAB'
(b'\x0b\x16!', b'2662', b'\x00\x01\x02\x03\x04', b'\t\r\nAB')
(2)编码转换:bytes类型通常与字符串进行相互转换,这涉及到编码(将字符串转换为bytes)和解码(将bytes转换为字符串)的过程。这个过程通常需要指定字符编码,如UTF-8、ASCII等。
# 使用UTF-8编码将字符串转换为bytes
utf8_string = "Hello, 你好!"
utf8_bytes = utf8_string.encode('utf-8')
print(utf8_bytes)
# b'Hello, \xe4\xbd\xa0\xe5\xa5\xbd\xef\xbc\x81'
# 使用UTF-8解码将bytes转换为字符串
decoded_string = utf8_bytes.decode('utf-8')
print(decoded_string) # Hello, 你好!
# 使用ASCII编码将字符串转换为bytes
ascii_string = "Hello, World!"
ascii_bytes = ascii_string.encode('ascii')
print(ascii_bytes) # b'Hello, World!'
# 使用ASCII解码将bytes转换为字符串
decoded_ascii_string = ascii_bytes.decode('ascii')
print(decoded_ascii_string) # Hello, World!
b'Hello, \xe4\xbd\xa0\xe5\xa5\xbd\xef\xbc\x81' Hello, 你好! b'Hello, World!' Hello, World!
(3) 不可变性:由于bytes对象是不可变的,这意味着一旦创建,它们的内容不能被修改。如果需要可变的字节序列,应该使用bytearray类型。
# 创建一个bytearray对象
ba = bytearray([1, 2, 3])
print(ba) # bytearray(b'\x01\x02\x03')
# 修改bytearray对象
ba[0] = 42
print(ba) # bytearray(b'*\x02\x03')
# 向bytearray对象添加元素
ba.append(4)
print(ba) # bytearray(b'*\x02\x03\x04')
# 从bytearray对象删除元素
del ba[0]
print(ba) # bytearray(b'\x02\x03\x04')
# 将bytearray对象转换为bytes对象
b = bytes(ba)
print(b) # b'\x02\x03\x04'
bytearray(b'\x01\x02\x03') bytearray(b'*\x02\x03') bytearray(b'*\x02\x03\x04') bytearray(b'\x02\x03\x04') b'\x02\x03\x04'
应用场景:bytes类型在处理网络通信、文件读写、加密解密等要用到二进制数据的场景中非常有用。它提供了一种有效存储和操作字节数据的方式。
语法结构:bytes的语法结构为bytes(source, encoding, errors),其中source是需要转换为字节对象的字符串或可迭代对象;encoding是指定编码方式的参数,默认为'utf-8';errors是指定编码错误处理方式的参数,默认为'strict'。
与字符串的区别:bytes类型与字符串类型(str)类似,但是字符编码为字节(原始的二进制数据表示形式)而不是Unicode字符。这使得bytes在处理非文本数据时非常有用。
创建列表:可以通过多种方式创建列表,如直接使用方括号[]定义一个列表,或利用list()函数从一个可迭代对象创建列表。也可以使用列表推导式来根据现有列表创建新列表。
my_list = [1, 2, 3, 'a', 'b', 'c']
my_list
[1, 2, 3, 'a', 'b', 'c']
my_list2=[[i for i in range(3)],[i for i in range(3)],[i for i in range(3)]]
my_list2
[[0, 1, 2], [0, 1, 2], [0, 1, 2]]
my_list = [1, 2, 3, 'a', 'b', 'c']
my_list,my_list[0],my_list[1],my_list[2],my_list[-2],my_list[-1]
([1, 2, 3, 'a', 'b', 'c'], 1, 2, 3, 'b', 'c')
for i in my_list:
print(i)
my_list
1 2 3 a b c
[1, 2, 3, 'a', 'b', 'c']
1.基本语法:列表切片的基本语法是list[start:stop:step]。其中,start是切片开始的索引,stop是切片结束的索引(不包括这个索引处的元素),step是步长,即每次移动的间隔。如果省略start,则默认从头开始;如果省略stop,则默认到末尾;如果省略step,则默认为1。
2.访问方向:切片操作可以按照从左到右的顺序进行,也可以从右到左,通过负数索引来实现。
3.创建副本:使用切片可以轻松地创建列表的副本,而不会影响原始列表。
4.修改列表:切片操作也可以用来修改列表的内容,例如反转列表或替换列表的一部分。
5.性能优势:切片操作在处理大型列表时具有性能优势,因为它不会创建整个新列表,而是创建一个指向原始列表中特定部分的新视图。
6.注意事项:在使用切片时,需要注意索引的边界条件,以及步长的正负和大小,这些都会影响切片的结果。
7.自定义切片:如果需要,还可以在自定义类中实现切片操作,以便为该类的对象提供类似的功能。
my_list = [0, 1, 2, 3, 4, 5]
# 获取从第1个到第4个元素(不包括第4个)
subset = my_list[1:4]
print(subset) # 输出: [1, 2, 3]
# 获取从第1个元素开始,每隔1个元素的子集
subset_with_step = my_list[::2]
print(subset_with_step) # 输出: [0, 2, 4]
# 反转列表
reversed_list = my_list[::-1]
print(reversed_list) # 输出: [5, 4, 3, 2, 1, 0]
[1, 2, 3] [0, 2, 4] [5, 4, 3, 2, 1, 0]
1、删除指定索引的元素:可以使用del语句或pop()方法来删除指定索引的元素。
使用del语句:del list[index]可以删除指定索引的元素。其中,list是要操作的列表,index是要删除元素的索引。
例如,del my_list[2]将删除my_list中索引为2的元素。
使用pop()方法:list.pop(index)可以删除指定索引的元素并返回该元素。
my_list = [1, 2, 3, 4, 5]
del my_list[2]
print(my_list) # 输出: [1, 2, 4, 5]
my_list = [1, 2, 3, 4, 5]
removed_element = my_list.pop(2)
print(removed_element) # 输出: 3
print(my_list) # 输出: [1, 2, 4, 5]
[1, 2, 4, 5] 3 [1, 2, 4, 5]
2、删除指定值的元素:可以使用remove()方法来删除第一个匹配到的指定值的元素。如果要删除所有匹配到的值,可以使用循环结构。
remove()方法:通过指定值来删除元素。例如,要删除值为3的元素,可以使用list.remove(3)
my_list = [1, 2, 3, 4, 5]
my_list.remove(3)
print(my_list) # 输出: [1, 2, 4, 5]
[1, 2, 4, 5]
clear()方法:清空列表中的所有元素。例如,要清空列表,可以使用list.clear()。
my_list = [1, 2, 3, 4, 5]
my_list.clear()
print(my_list) # 输出: []
[]
1、使用加号运算符:可以直接使用+运算符来连接两个列表,生成一个新的列表。
list1 = [1, 2, 3]
list2 = [4, 5, 6]
merged_list = list1 + list2
print(merged_list) # 输出:[1, 2, 3, 4, 5, 6]
[1, 2, 3, 4, 5, 6]
2、使用extend()方法:如果想要将一个列表的元素添加到另一个列表的末尾,可以使用extend()方法。
list1 = [1, 2, 3]
list2 = [4, 5, 6]
list1.extend(list2)
print(list1) # 输出:[1, 2, 3, 4, 5, 6]
[1, 2, 3, 4, 5, 6]
3、使用列表推导式:列表推导式提供了一种简洁的方式来合并列表,尤其适用于更复杂的列表合并操作。
list1 = [1, 2, 3]
list2 = [4, 5, 6]
merged_list = [item for sublist in [list1, list2] for item in sublist]
print(merged_list) # 输出:[1, 2, 3, 4, 5, 6]
[1, 2, 3, 4, 5, 6]
4、使用itertools.chain():如果需要合并多个列表,可以使用itertools.chain()函数,它会创建一个迭代器,按顺序返回各个列表中的元素。
import itertools
list1 = [1, 2, 3]
list2 = [4, 5, 6]
merged_list = list(itertools.chain(list1, list2))
print(merged_list) # 输出:[1, 2, 3, 4, 5, 6]
[1, 2, 3, 4, 5, 6]
1、使用切片操作:通过指定起始索引、结束索引和步长来分割列表。
my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 分割前三个元素
sublist1 = my_list[:3]
print(sublist1) # 输出:[1, 2, 3]
# 分割从第4个到第7个元素(不包括第7个)
sublist2 = my_list[3:7]
print(sublist2) # 输出:[4, 5, 6, 7]
# 分割所有偶数位置的元素
sublist3 = my_list[::2]
print(sublist3) # 输出:[1, 3, 5, 7, 9]
[1, 2, 3] [4, 5, 6, 7] [1, 3, 5, 7, 9]
2、使用循环结构:通过遍历列表并按照一定的条件进行分割。
my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 分割小于等于5的元素
sublist1 = []
for item in my_list:
if item <= 5:
sublist1.append(item)
print(sublist1) # 输出:[1, 2, 3, 4, 5]
# 分割大于等于6的元素
sublist2 = []
for item in my_list:
if item >= 6:
sublist2.append(item)
print(sublist2) # 输出:[6, 7, 8, 9, 10]
[1, 2, 3, 4, 5] [6, 7, 8, 9, 10]
3、使用列表推导式:使用列表推导式可以更简洁地实现分割列表的操作。
my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 分割小于等于5的元素
sublist1 = [item for item in my_list if item <= 5]
print(sublist1) # 输出:[1, 2, 3, 4, 5]
# 分割大于等于6的元素
sublist2 = [item for item in my_list if item >= 6]
print(sublist2) # 输出:[6, 7, 8, 9, 10]
[1, 2, 3, 4, 5] [6, 7, 8, 9, 10]
1、sort() 方法
优点:就地排序,不需要额外的存储空间。
缺点:不稳定排序,时间复杂度为O(n log n)。
lst = [3, 1, 4, 1, 5, 9]
lst.sort()
print(lst) # 输出:[1, 1, 3, 4, 5, 9]
[1, 1, 3, 4, 5, 9]
2、sorted() 函数
优点:产生一个新的排序列表,原列表不变。稳定排序,时间复杂度为O(n log n)。
缺点:需要额外的存储空间。
lst = [3, 1, 4, 1, 5, 9]
new_lst = sorted(lst)
print(new_lst) # 输出:[1, 1, 3, 4, 5, 9]
[1, 1, 3, 4, 5, 9]
3、冒泡排序(python 进阶)
优点:简单易懂,适合小列表。
缺点:时间复杂度为O(n^2),不适合大列表。
def bubble_sort(lst):
n = len(lst)
for i in range(n):
for j in range(0, n-i-1):
if lst[j] > lst[j+1]:
lst[j], lst[j+1] = lst[j+1], lst[j]
return lst
lst = [3, 1, 4, 1, 5, 9]
print(bubble_sort(lst)) # 输出:[1, 1, 3, 4, 5, 9]
[1, 1, 3, 4, 5, 9]
4、快速排序 (python 进阶)
优点:平均时间复杂度为O(n log n),适合大列表。
缺点:不稳定排序,最坏情况下时间复杂度为O(n^2)。
def quick_sort(lst):
if len(lst) <= 1:
return lst
pivot = lst[len(lst) // 2]
left = [x for x in lst if x < pivot]
middle = [x for x in lst if x == pivot]
right = [x for x in lst if x > pivot]
return quick_sort(left) + middle + quick_sort(right)
lst = [3, 1, 4, 1, 5, 9]
print(quick_sort(lst)) # 输出:[1, 1, 3, 4, 5, 9]
[1, 1, 3, 4, 5, 9]
b=[ i for i in range(11) ]
a=[ i for i in range(11) if i%2==0]
a,b
([0, 2, 4, 6, 8, 10], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
以下是使用Python内置函数len()、max()和min()的示例:
# 创建一个列表
my_list = [1, 2, 3, 4, 5]
# 使用len()函数获取列表长度
length = len(my_list)
print("列表长度:", length)
# 使用max()函数找出列表中的最大元素
max_value = max(my_list)
print("最大元素:", max_value)
# 使用min()函数找出列表中的最小元素
min_value = min(my_list)
print("最小元素:", min_value)
# 列表运算,可以加乘其他就不知道了
my_list = [1, 2, 3, 4, 5]
print('列表运算',my_list*2)
print('列表运算',my_list+[1,23,])
列表长度: 5 最大元素: 5 最小元素: 1 列表运算 [1, 2, 3, 4, 5, 1, 2, 3, 4, 5] 列表运算 [1, 2, 3, 4, 5, 1, 23]
在Python中,元组(tuple)是一种有序的、不可变的序列类型,用于存储多个元素。元组的元素可以是不同类型的数据,例如整数、浮点数、字符串等。
#逗号创建
my_tuple = 1, 2, 3
# 使用圆括号创建元组
my_tuple2 = (1, 2, 3)
# 使用tuple()函数创建元组
my_list2 = [1, 2, 3]
my_tuple3 = tuple(my_list2)
my_tuple4 = tuple(i for i in range(4))#推导式必须要有tuple,不然不认识
my_tuple , my_tuple2, my_tuple3,my_tuple4,'不加tuple()就会这样:',(i for i in range(4))
((1, 2, 3), (1, 2, 3), (1, 2, 3), (0, 1, 2, 3), '不加tuple()就会这样:', <generator object <genexpr> at 0x0000023C9BBE2420>)
#下标访问
my_tuple =( 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
print(my_tuple[0]) # 输出:0
print(my_tuple[-1])
0 10
my_tuple =( 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
my_tuple[1::2] , my_tuple[::-1]
((1, 3, 5, 7, 9), (10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0))
字典(Dictionary)是Python中的一种数据结构,由键值对组成。它允许使用一个特定的键来访问与之关联的值,从而提供了一种灵活的数据存储和检索方式。以下是关于Python字典的详细介绍:
字典是由一系列键值对构成的集合,其中每个键都与一个值相关联。字典使用花括号 {} 来定义,并且键值对之间用逗号 , 分隔,键和值之间则通 过冒号 : 连接。例如,my_dict = {"key1": "value1", "key2": "value2"} 创建了一个包含两个键值对的字典。
在Python 3.6之前,字典是无序的,意味着不能保证元素会按照特定的顺序存储或遍历。但从Python 3.7起,字典被保证为有序的,即插入顺序会被记住。
与元组不同,字典是可变的,可以随时添加、修改或删除其中的键值对。
字典中的值可以通过其键来访问。如果尝试访问不存在的键,Python会抛出一个KeyError异常。为了避免这种情况,可以使用get()方法,该方法允许提供一个默认值,当键不存在时返回该默认值。
字典中的键必须是唯一的,不允许有重复的键存在。
字典中的键和值可以是任意类型,包括但不限于字符串、数字、列表甚至是其他字典。这使得字典非常灵活,可以用于多种不同的数据存储需求。
这是一种从其他可迭代对象创建字典的快捷方式,类似于列表推导式,但更为强大和灵活。
由于字典是基于哈希表实现的,因此它在查找和插入操作上通常具有很高的效率。
1、使用花括号({})和冒号(:):这是最常见的创建字典的方式。在花括号中,通过键值对的形式定义字典元素,其中键和值之间用冒号分隔,不同键值对之间用逗号分隔。例如:
#my_dict={key:value}
#my_dict={键:值}
my_dict = {"name": "Alice", "age": 25, "city": "New York"}
my_dict
{'name': 'Alice', 'age': 25, 'city': 'New York'}
2、使用内置函数dict():可以通过dict()函数将其他可迭代对象转换为字典。例如,可以将包含键值对的元组或列表转换为字典
my_tuple = ("name", "Alice", "age", 25, "city", "New York")
my_dict = dict(zip(my_tuple[::2], my_tuple[1::2]))
my_dict
{'name': 'Alice', 'age': 25, 'city': 'New York'}
3、使用字典推导式:字典推导式是一种简洁的方式来创建字典,它可以根据已有的可迭代对象生成新的字典。例如,可以根据一个列表生成一个平方数的字典:
numbers = [1, 2, 3, 4, 5]
squares = {num: num**2 for num in numbers}
squares
{1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
4、使用fromkeys()方法:fromkeys()方法用于创建一个新字典,其中每个键都对应一个指定的值。例如,可以创建一个所有键都对应空字符串的字典:
my_dict = dict.fromkeys(["name", "age", "city"],'')
my_dict
{'name': '', 'age': '', 'city': ''}
1、增加元素
向字典中添加新的键值对。
# 创建一个空字典
my_dict = {'name': 'Alice', 'age': 25}
# 增加操作
my_dict["name1"] = "Alice"
my_dict["age1"] = 25
print(my_dict) # 输出: {'name': 'Alice', 'age': 25}
{'name': 'Alice', 'age': 25, 'name1': 'Alice', 'age1': 25}
2、删除元素
从字典中移除指定的键值对。
my_dict = {'name': 'Alice', 'age': 25}
print(my_dict)
del my_dict["age"]
my_dict # 输出: {'name': 'Alice'}
{'name': 'Alice', 'age': 25}
{'name': 'Alice'}
3、修改
更新字典中指定键的值。
# 修改操作
my_dict = {'name': 'Alice', 'age': 25}
print(my_dict)
my_dict["name"] = "Bob"
print(my_dict) # 输出: {'name': 'Bob'}
{'name': 'Alice', 'age': 25}
{'name': 'Bob', 'age': 25}
4、查询
根据键获取字典中的值。
name = my_dict["name"]
print(name) # 输出: Bob
Bob
5、其他
如果遇到键不存在的情况,可以使用字典的get()方法来避免抛出KeyError。get()方法接受两个参数,第一个参数是要查询的键,第二个参数是可选的,表示如果键不存在时返回的默认值。
# 处理键不存在的情况
city = my_dict.get("city", "没有键city")
name= my_dict.get("name", "没有键name")
print(my_dict)
print(city)
print(name)
{'name': 'Bob', 'age': 25}
没有键city
Bob
创建一个空集合必须使用set(),而不能使用{},因为后者用于创建空字典。
my_set = set()
#创建一个空集合必须使用set(),而不能使用{},因为后者用于创建空字典。
#创建一个空集合必须使用set(),而不能使用{},因为后者用于创建空字典。
#创建一个空集合必须使用set(),而不能使用{},因为后者用于创建空字典。
my_set2 = { }
print(type(my_set),type(my_set2)) # 输出:set()
# 创建一个非空集合
my_set = {1, 2, 3}
print(my_set) # 输出:{1, 2, 3}
<class 'set'> <class 'dict'>
{1, 2, 3}
# 集合推导式:你可以使用集合推导式来根据一定的规则生成集合。
squares = {x**2 for x in range(1, 5)} # {1, 4, 9, 16}
squares
{1, 4, 9, 16}
my_set = {1, 2, 3}
print(my_set)
my_set.add(4)
print(my_set)
{1, 2, 3}
{1, 2, 3, 4}
my_set = {1,5, 2, 3}
print(my_set)
# 从集合中移除元素
my_set.remove(2)
print(my_set)
{1, 2, 3, 5}
{1, 3, 5}
可以进行并集(| 操作符或update()方法)、交集(& 操作符)、差集(- 操作符)等。
a = {1, 2, 3}
b = {3, 4, 5}
union_set = a | b # {1, 2, 3, 4, 5}
intersection_set = a & b # {3}
difference_set = a - b # {1, 2}
union_set,intersection_set,difference_set,
({1, 2, 3, 4, 5}, {3}, {1, 2})
在Python中,分支结构是通过if、elif和else关键字来实现的。这些关键字用于根据条件执行不同的代码块。
# if (条件/布尔类型):
# 满足条件后执行。
age = 18
if age >= 18:
print("你已经成年了")
if True:
print("你已经成年了")
你已经成年了 你已经成年了
age = 16
if age >= 18:
print("你已经成年了")
else:
print("你还未成年")
你还未成年
score = 85
if score >= 90:
print("优秀")
elif score >= 80:
print("良好")
elif score >= 60:
print("及格")
else:
print("不及格")
良好
在这些示例中,我们使用了比较运算符(如>=)来比较变量的值。你可以根据需要使用其他比较运算符(如<、>、==等)来构建更复杂的条件表达式。
此外,还可以使用逻辑运算符(如and、or)来组合多个条件。例如:
age = 25
country = "中国"
if age >= 18 and country == "中国":
print("你已经成年了,并且是中国公民")
你已经成年了,并且是中国公民
age = 25
country = "中国"
if age >= 18 and country == "中国":
print("你已经成年了,并且是中国公民")
你已经成年了,并且是中国公民
Python中,循环结构用于重复执行一段代码。主要有两种循环结构:for循环和while循环。
# for 变量 in 序列:
# 循环体
fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
print(fruit)
apple banana cherry
# while 条件:
# 循环体
sum = 0
i = 1
while i <= 10:
sum += i
i += 1
print(sum)
55
在实际编程中,我们经常需要控制循环的执行流程。以下是一些常见的循环控制语句:
break:break语句用于立即终止当前循环,跳出循环体。它通常用于在满足某个条件时提前结束循环。
for i in range(1, 11):
if i == 5:
break
print(i)
1 2 3 4
continue:continue语句用于跳过当前循环的剩余部分,直接进入下一次循环。它通常用于在满足某个条件时跳过当前迭代。
for i in range(1, 11):
if i % 2 == 0:
print(f'{i}不是奇数')
continue
print(i)
1 2不是奇数 3 4不是奇数 5 6不是奇数 7 8不是奇数 9 10不是奇数
Python的函数模块是指包含一系列函数的代码文件,通常以.py为扩展名。这些函数可以定义在模块中,然后在其他程序中导入并使用。函数模块有助于代码重用和模块化编程。
函数定义:在Python中,可以使用def关键字来定义一个函数。
返回值处理:函数可以通过return语句返回一个值。如果没有return语句或return后面没有表达式,则函数返回None。
# def 函数名(函数参数):
# # 函数体
# # ...
# return result #return可以让函数返回函数结果
def add1(a, b):
c=a + b
print(c)
return c
def add2(a, b):
c=a + b
print(c)
c=0
# 如本例 先执行函数体,再返回函数值
add1(1,2) , add2(1,2) , c
3 3
(3, None, 0)
1、位置参数:按照参数在函数定义中的位置顺序传递。
关键字参数:通过参数名指定参数值。
默认参数:为函数参数提供默认值,如果在调用时没有提供相应的参数值,则使用默认值。
可变参数:使用*args表示接收任意数量的位置参数,使用**kwargs表示接收任意数量的关键字参数。
使用*args表示接收任意数量的位置参数:
当函数需要接收不确定数量的位置参数时,可以在参数列表中使用*args。*args是一个元组,其中包含了传递给函数的所有位置参数。
def print_args(*args):
for arg in args:
print(arg)
print_args(1, 2, 3) # 输出:1 2 3
print_args("a", "b", "c") # 输出:a b c
1 2 3 a b c
2、使用**kwargs表示接收任意数量的关键字参数:
当函数需要接收不确定数量的关键字参数时,可以在参数列表中使用**kwargs。**kwargs是一个字典,其中包含了传递给函数的所有关键字参数。
例如,定义一个函数print_kwargs,它接收任意数量的关键字参数并打印它们:
def print_kwargs(**kwargs):
for key, value in kwargs.items():
print(key, value)
print_kwargs(a=1, b=2, c=3) # 输出:a 1 b 2 c 3
print_kwargs(name="Alice", age=25) # 输出:name Alice age 25
a 1 b 2 c 3 name Alice age 25
是一种没有显式定义函数名的函数,通常使用lambda表达式来创建。
匿名函数在Python中是通过lambda关键字来定义的,它允许你快速创建一个简单的、单行的、临时使用的函数,而不需要像常规函数那样先定义函数名。
匿名函数的一般形式是lambda 参数列表: 表达式。这种函数通常用于需要一个简单操作的地方,例如作为其他函数的参数。
匿名函数的特点如下:
简洁性:匿名函数的语法结构非常简单,可以在代码中快速编写和使用。
无需命名:由于不需要为函数指定名称,这有助于减少命名冲突和提高代码的可读性。
单行表达式:匿名函数通常只包含一个表达式,这意味着它们通常用于执行简单的操作。
临时使用:匿名函数通常用于那些不需要重复使用的场景,比如排序、映射等一次性操作。
double = lambda x: print(2*x)
numbers = [1, 2, 3, 4]
double(numbers )
[1, 2, 3, 4, 1, 2, 3, 4]
double(123)
246