python(print、import隐藏特性、赋值魔法、代码块缩进)

1.打印多个参数

你知道,print可用于打印一个表达式,这个表达式要么是字符串,要么将自动转换为字符串。但实际上,你可同时打印多个表达式,条件是用逗号分隔它们:
>>> print('Age:', 42) 
Age: 42 
如你所见,在参数之间插入了一个空格字符。在你要合并文本和变量值,而又不想使用字符串格式设置功能时,这种行为很有帮助。
>>> name = 'Gumby' 
>>> salutation = 'Mr.' 
>>> greeting = 'Hello,' 
>>> print(greeting, salutation, name) 
Hello, Mr. Gumby 
如果字符串变量greeting不包含逗号,如何在结果中添加呢?你不能像下面这样做:
print(greeting, ',', salutation, name) 

因为这将在逗号前添加一个空格。下面是一种可行的解决方案:
print(greeting + ',', salutation, name) 
它将逗号和变量greeting相加。如果需要,可自定义分隔符:
>>> print("I", "wish", "to", "register", "a", "complaint", sep="_") 
I_wish_to_register_a_complaint 
你还可自定义结束字符串,以替换默认的换行符。例如,如果将结束字符串指定为空字符串,以后就可继续打印到当前行。
print('Hello,', end='') 
print('world!')
上述代码打印Hello, world! 仅当这些代码包含在脚本中时才如此。在交互式Python会话中,将分别执行每条语句并打印其内容。

2.导入时重命名
从模块导入时,通常使用
importsomemodule 
或使用
fromsomemodule import somefunction 

fromsomemodule import somefunction, anotherfunction, yetanotherfunction 

from somemodule import * 
仅当你确定要导入模块中的一切时,采用使用最后一种方式。但如果有两个模块,它们都包含函数open,该如何办呢?你可使用第一种方式导入这两个模块,并像下面这样调用函数:
module1.open(...) 
module2.open(...) 
但还有一种办法:在语句末尾添加as子句并指定别名。下面是一个导入整个模块并给它指定别名的例子:
>>> import math as foobar 
>>> foobar.sqrt(4) 
2.0 
下面是一个导入特定函数并给它指定别名的例子:
>>> from math import sqrt as foobar 
>>> foobar(4) 
2.0 

对于前面的函数open,可像下面这样导入它们:
from module1 import open as open1 
from module2 import open as open2 

 

3.赋值魔法

1)序列解包:
赋值语句你见过很多,有的给变量赋值,还有的给数据结构的一部分(如列表中的元素和切片,或者字典项)赋值,但还有其他类型的赋值语句。例如,可同时(并行)给多个变量赋值:
>>> x, y, z = 1, 2, 3 
>>> print(x, y, z) 
1 2 3 
使用这种方式还可交换多个变量的值。
>>> x, y = y, x 
>>> print(x, y, z) 
2 1 3 
实际上,这里执行的操作称为序列解包(或可迭代对象解包):将一个序列(或任何可迭代对象)解包,并将得到的值存储到一系列变量中。下面用例子进行解释。
>>> values = 1, 2, 3 
>>> values 
(1, 2, 3) 
>>> x, y, z = values 
>>> x 
1
这在使用返回元组(或其他序列或可迭代对象)的函数或方法时很有用。假设要从字典中随便获取(或删除)一个键-值对,可使用方法popitem,它随便获取一个键-值对并以元组的方式返回。接下来,可直接将返回的元组解包到两个变量中。
>>> scoundrel = {'name': 'Robin', 'girlfriend': 'Marion'} 
>>> key, value = scoundrel.popitem() 
>>> key 
'girlfriend' 
>>> value 
'Marion' 
这让函数能够返回被打包成元组的多个值,然后通过一条赋值语句轻松地访问这些值。要解包的序列包含的元素个数必须与你在等号左边列出的目标个数相同,否则Python将引发异常。
>>> x, y, z = 1, 2 
Traceback (most recent call last): 
 File "<stdin>", line 1, in <module> 
ValueError: need more than 2 values to unpack 
>>> x, y, z = 1, 2, 3, 4 
Traceback (most recent call last): 
 File "<stdin>", line 1, in <module> 
ValueError: too many values to unpack 
可使用星号运算符(*)来收集多余的值,这样无需确保值和变量的个数相同,如下例所示:
>>> a, b, *rest = [1, 2, 3, 4] 
>>> rest 
[3, 4] 
还可将带星号的变量放在其他位置。
>>> name = "Albus Percival Wulfric Brian Dumbledore" 
>>> first, *middle, last = name.split() 
>>> middle 
['Percival', 'Wulfric', 'Brian'] 
赋值语句的右边可以是任何类型的序列,但带星号的变量最终包含的总是一个列表。在变量和值的个数相同时亦如此。
>>> a, *b, c = "abc" 
>>> a, b, c 
('a', ['b'], 'c') 

这种收集方式也可用于函数参数列表中。

 

2)链式赋值:
链式赋值是一种快捷方式,用于将多个变量关联到同一个值。这有点像并行赋值,但只涉及一个值:
x = y = somefunction() 
上述代码与下面的代码等价:
y = somefunction() 
x = y 
请注意,这两条语句可能与下面的语句不等价:
x = somefunction() 
y = somefunction() 

 

3)增强赋值
可以不编写代码x = x + 1,而将右边表达式:中的运算符(这里是+)移到赋值运算符(=)的前面,从而写成x += 1。这称为增强赋值,适用于所有标准运算符,如*、/、%等。
>>> x = 2 
>>> x += 1 
>>> x *= 2 
>>> x 

增强赋值也可用于其他数据类型(只要使用的双目运算符可用于这些数据类型)。
>>> fnord = 'foo' 
>>> fnord += 'bar' 
>>> fnord *= 2 
>>> fnord 
'foobarfoobar' 
通过使用增强赋值,可让代码更紧凑、更简洁,同时在很多情况下的可读性更强。

 

4.代码块:缩进的乐趣
代码块其实并不是一种语句,代码块是一组语句,可在满足条件时执行(if语句),可执行多次(循环),等等。代码块是
通过缩进代码(即在前面加空格)来创建的。

也可使用制表符来缩进代码块。Python将制表符解释为移到下一个制表位(相邻制表位相距8个空格),但标准(也是更佳的)做法是只使用空格(而不使用制表符)来缩进,且每级缩进4个空格。

在同一个代码块中,各行代码的缩进量必须相同。下面的伪代码(并非真正的Python代码)演示了如何缩进:
this is a line 
this is another line: 
 this is another block 
 continuing the same block 
 the last line of this block 
phew, there we escaped the inner block 
在Python中,使用冒号(:)指出接下来是一个代码块,并将该代码块中的每行代码都缩进相同的程度。发现缩进量与之前相同时,就知道当前代码块到此结束了。(很多用于编程的编辑器和IDE知道如何缩进代码块,可帮助你轻松地正确缩进。)

加入Python代码块通常涉及到在程序中插入特定的功能或者逻辑,以完成特定任务或者解决特定问题。这可以在Python脚本、程序、模块等多个层次上进行。下面我会分别介绍如何在脚本级别、函数级别以及文件级别的Python代码块示例: ### 1. 脚本级别的代码块 在一个独立的Python脚本中,你可以使用缩进来组织代码块Python使用空格或制表符来进行缩进。例如,在一个简单的脚本中添加一段用于计算两个数字之和的代码块: ```python def add_numbers(x, y): """ 计算并返回两个数字的和。 参数: x (int): 第一个加数。 y (int): 第二个加数。 返回: int: 数字x和y的和。 """ return x + y # 主程序 if __name__ == "__main__": # 创建变量 num1 = 5 num2 = 7 # 执行add_numbers函数并将结果赋值给sum_result变量 sum_result = add_numbers(num1, num2) # 输出结果 print("两数之和为:", sum_result) ``` ### 2. 函数级别的代码块 在函数内部,你可以有更精细的代码块组织,比如条件分支、循环或者嵌套函数。下面是一个例子展示如何在函数内部定义一个辅助函数: ```python def process_data(data_list): """ 对数据列表进行处理并返回新的列表。 参数: data_list (list): 输入的数据列表。 返回: list: 处理后的数据列表。 """ def calculate_average(lst): """ 计算列表中所有元素的平均值。 参数: lst (list): 需要计算平均值的列表。 返回: float: 列表元素的平均值。 """ total_sum = sum(lst) average_value = total_sum / len(lst) return average_value processed_list = [] for item in data_list: if isinstance(item, list): # 如果元素是列表,则递归处理 processed_sublist = process_data(item) processed_list.append(processed_sublist) else: # 否则,计算平均值 avg_value = calculate_average([item]) processed_list.append(avg_value) return processed_list ``` ### 3. 文件级别的代码块 如果你在文件中工作,特别是大型项目中,可能会有一个主入口点(通常是`main.py`),在这个文件中加载其他模块,或者执行一系列逻辑。这里的一个例子展示了如何导入其他模块并在其中运行功能: ```python from module_math import perform_calculations def main(): input_value = 42 result = perform_calculations(input_value) print("结果:", result) if __name__ == "__main__": main() ``` 在这个例子中,`module_math.py`是一个包含`perform_calculations`函数的外部模块,这个函数负责执行实际的数学计算。 以上就是关于在不同层级添加Python代码块的一些基本指导,希望对你有所帮助!如果你有关于具体场景或问题的详细需求,也可以进一步描述,以便提供更具体的帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值