文章目录
Python 关键字
False class finally is return
None continue for lambda try
True def from nonlocal while
and del global not with
as elif if or yield
assert else import pass
break except in raise
with关键字
在 Python 中,with 关键字用于定义上下文管理器,它提供了一种简洁而安全地管理资源的方式。with 语句创建了一个运行时的上下文环境,确保在进入和退出该环境时相关资源会被正确处理。以下是 with 关键字的主要作用:
1.资源管理: with 关键字提供了一种自动管理资源的方法。在进入 with 语句块时,会调用相应的上下文管理器的 enter() 方法,并在退出 with 语句块时调用 exit() 方法。这样可以确保资源的正确打开和关闭,避免资源泄漏。
2.异常处理: with 语句块可以处理可能发生的异常,并保证在退出时资源能够被正确清理。当在 with 语句块中发生异常时,会自动触发上下文管理器的 exit() 方法,用于执行异常处理逻辑。这样可以有效地处理异常,并避免异常导致的资源泄漏。
3.线程锁定: 在多线程编程中,with 关键字也可以用于线程锁定的上下文管理。通过获取锁对象进入 with 语句块,可以确保在执行 with 语句块内的代码时,其他线程无法访问相同的被锁定资源。当退出 with 语句块时,会自动释放锁对象。
综上所述,with 关键字在 Python 中用于定义上下文管理器,提供了资源管理和异常处理的便利。通过 with 语句块,可以自动管理资源的打开和关闭,并在出现异常时进行适当的处理。此外,在多线程编程中,with 关键字还可以用于线程锁定,保护共享资源的访问。
yield 关键字
yield 是 Python 中的关键字,用于定义生成器函数(generator function)或生成器表达式(generator expression)。它在迭代器(iterator)的创建和处理过程中起到了重要的作用。
yield 关键字的主要功能是将一个函数转换为一个生成器,使得函数在执行时可以暂停并保存当前的状态,然后在下一次迭代时从上一次暂停的位置继续执行。这种方式被称为“惰性计算”(lazy evaluation),因为生成器每次只生成一个值,而不是一次性生成所有值。
以下是 yield 关键字的两种常见用法:
- 生成器函数: 在一个函数里面使用 yield 语句,这个函数就成为了生成器函数。当生成器函数被调用时,它返回一个生成器对象,而不执行函数内的代码。每当生成器的 next() 方法被调用时,函数会从 yield 语句处开始执行,生成一个值并返回,然后暂停。下一次调用 next() 时,函数会从上一次暂停的位置继续执行。
def generator_function():
yield 1
yield 2
yield 3
gen = generator_function()
print(next(gen)) # 输出: 1
print(next(gen)) # 输出: 2
print(next(gen)) # 输出: 3
- 生成器表达式: 生成器表达式使用类似列表推导式的语法,但使用圆括号而不是方括号,并且返回一个生成器对象。它可以在循环或其他迭代环境中使用,逐个生成值。
gen_expr = (x ** 2 for x in range(5))
print(next(gen_expr)) # 输出: 0
print(next(gen_expr)) # 输出: 1
print(next(gen_expr)) # 输出: 4
yield 关键字使得生成器函数可以按需生成值,极大地节省了内存空间,并且支持逐步处理大数据集或无限序列的情况。生成器在迭代和处理大型数据集时非常有用,可以有效地提高程序的性能和效率。
操作符
解包操作符
Python 中,** 是一种操作符,称为解包操作符(unpacking operator)或关键字参数传递操作符(keyword argument unpacking operator)。
它的作用是将字典或关键字参数解包,并将解包后的键值对作为关键字参数传递给函数或方法。
具体来说,** 用于两个不同的上下文:
1.函数调用时的解包操作:
当在函数调用中使用 ** 时,它会解包一个字典并将其键值对作为关键字参数传递给函数。
示例:
def my_func(param1, param2):
print(param1, param2)
my_dict = {'param1': 10, 'param2': 20}
my_func(**my_dict) # 等同于 my_func(param1=10, param2=20)
在上述示例中,my_dict 字典被解包并将其键值对作为关键字参数传递给 my_func 函数。
2.字典的合并操作:
当在字典合并中使用 ** 时,它可以将一个字典的键值对解包并合并到另一个字典中。
示例:
dict1 = {'a': 1}
dict2 = {'b': 2, **dict1} # 将 dict1 字典解包并合并到 dict2 字典
print(dict2) # 输出: {'b': 2, 'a': 1}
在上述示例中,dict1 将 dict1 字典解包,并将其键值对合并到 dict2 字典中。
总结来说, 解包操作符在函数调用中用于将字典解包为关键字参数,而在字典合并中用于将字典的键值对解包并合并到另一个字典中。它是一个有用的操作符,可以简化代码并提供更灵活的参数传递方式。
需要注意的是,在 Python 3.5 之前的版本中,字典解包操作符 ** 和关键字参数解包操作符 ** 并不存在,这些功能是在 Python 3.5 版本引入的。
函数参数
关键字参数
在 Python 中,关键字参数(Keyword Arguments)是一种函数调用的参数传递方式,其中参数以key=value
的形式传递给函数。它允许你根据参数的名称明确指定参数的值,而不必按照参数的位置进行传递。
关键字参数提供了以下优点:
1.可选性:可以只传递需要的参数,而不必传递所有参数。这使得函数调用更加灵活。
2.易读性:通过指定参数名称,函数调用变得更加清晰、易于阅读和理解,因为参数的目的和含义在调用时变得明显。
下面是一个使用关键字参数的示例:
def greet(name, age):
print(f"Hello, {name}! You are {age} years old.")
** 使用关键字参数进行函数调用 **
greet(name="Alice", age=30)
在上述示例中,函数greet接受两个参数name和age。通过使用关键字参数,我们明确指定参数的名称和对应的值。这使得函数调用更加清晰易读,不依赖于参数的位置顺序。
关键字参数在函数定义和函数调用时都支持。在定义函数时,可以使用参数名称指定默认值,使其成为可选参数。在调用函数时,可以通过关键字参数指定具体的参数值。
需要注意的是,关键字参数的使用应遵循一定的语法规则:关键字参数必须在位置参数之后传递,并且不能重复指定同一个参数。
总结来说,关键字参数是一种通过指定参数名称传递参数值的方法,它提供了可选性和易读性,使函数调用更加灵活和清晰易懂。
位置参数
在 Python 中,位置参数(Positional Arguments)是一种函数调用的参数传递方式。它是指按照函数定义时参数的位置顺序,依次传递参数值给函数。
位置参数的特点如下:
位置顺序:位置参数需要按照函数定义时参数的位置顺序进行传递。也就是说,第一个位置参数的值应该传递给第一个参数,第二个位置参数的值传递给第二个参数,依此类推。
必需性:位置参数是必需的,也就是说在函数调用中必须为每个位置参数提供一个对应的参数值,否则会导致调用错误。
下面是一个使用位置参数的示例:
def greet(name, age):
print(f"Hello, {name}! You are {age} years old.")
# 使用位置参数进行函数调用
greet("Alice", 30)
在上述示例中,函数 greet 接受两个位置参数 name 和 age。在函数调用时,我们按照位置顺序将对应的参数值传递给函数。即 “Alice” 对应 name 参数,30 对应 age 参数。
位置参数的值是根据位置对应的,因此参数的顺序非常重要。在函数定义时,参数的顺序决定了在调用时应该传递的值的顺序。
需要注意的是,如果函数定义中包含默认值参数(默认参数),并且在函数调用时没有为位置参数提供参数值,则将使用默认值。但是,位置参数传递仍然需要按照正确的顺序。
总结来说,位置参数是一种按照函数定义时参数位置顺序传递参数值的方式。它是函数调用中必需的参数,并且参数的顺序非常重要。
数据类型
集合
有序集合和无序集合区别
有序集合和无序集合的区别在于数据元素的有序性和唯一性。
-
有序集合(Ordered Collection):
有序集合是指元素按照特定顺序排列的集合类型。
有序集合中的元素可以根据它们在集合中的位置进行访问和迭代。
有序集合中的元素可以重复。
在 Python 中,有序集合的代表类型包括列表(list)和元组(tuple)。 -
无序集合(Unordered Collection):
无序集合是指元素没有特定顺序排列的集合类型。
无序集合中的元素不能根据位置进行访问和迭代,因为它们没有固定的顺序。
无序集合中的元素是唯一的,不会重复出现。
在 Python 中,无序集合的代表类型包括集合(set)和字典(dict)。
集合是一组唯一元素的集合,用于数学集合运算。
字典是由键值对组成的集合,用于表示映射关系。
需要注意的是,虽然列表(list)是有序集合,但它的顺序是可变的,可以通过索引操作进行修改。而元组(tuple)是不可变的有序集合,一旦创建后其元素的顺序就不可更改。
总结来说,有序集合是按照特定顺序排列的集合,可以重复;无序集合是元素没有特定顺序排列的集合,元素唯一。
读取和保存tensor
一些问题
f-string 的用法——f-string 的用法
在 Python 中,字符串前面加上 f 是 f-string 的用法。f-string 是一种方便的字符串插值语法,用于将变量嵌入到字符串中。
在 f-string 中,可以在字符串中使用花括号 {} 来插入变量或表达式,并在运行时自动将其替换为对应的值。在花括号内部,可以使用变量名、表达式,以及调用函数等。
以下是一些示例:
name = “Alice”
age = 25
嵌入变量
greeting = f"Hello, {name}!"
print(greeting) # 输出: Hello, Alice!
嵌入表达式
message = f"{name} is {age + 1} years old."
print(message) # 输出: Alice is 26 years old.
嵌入函数调用
uppercase_name = f"{name.upper()}"
print(uppercase_name) # 输出: ALICE
使用 f-string 可以更简洁地将变量嵌入到字符串中,提高代码的可读性和可维护性。在 f-string 中,还可以结合格式化选项来控制变量的显示格式,例如指定小数位数、填充字符等。
请注意,f-string 是在 Python 3.6 版本引入的,需要确保你的 Python 版本高于等于 3.6 才能使用该特性。
反斜杠被解释为转义字符
报错
File “C:\Users\Administrator\Desktop\data\data\counts.py”, line 6 dirs=[“C:\Users\Administrator\Desktop\data\data\benign_processed”,“C:\Users\Administrator\Desktop\data\data\malware_processed”] ^ SyntaxError: (unicode error) ‘unicodeescape’ codec can’t decode bytes in position 2-3: truncated \UXXXXXXXX escape
解决办法:使用原始字符串(Raw String):在字符串前面加上字母r,可以创建一个原始字符串,其中反斜杠不会被看作转义字符。例如:
dirs = [r"C:\Users\Administrator\Desktop\data\data\benign_processed",
r"C:\Users\Administrator\Desktop\data\data\malware_processed"]