《Python编程快速上手》4、通过试验了解函数
[复制链接]
本帖最后由 秦天qintian0303 于 2024-5-2 20:16 编辑
函数是将代码逻辑分组的主要方式。我们在前面的章节已经见过一些函数例如,print()、input() 和 len()等等,这些函数式Python的内建函数,也就是自带的,我们可以直接使用,不过更多的时候我们会常见自己的函数,例如被经常使用的代码等等,这样可以让代码看着更简洁,利用率更高。
无输入参数的例程:
def hello():
print('Hello one!')
print('Hello two!')
print('Hello there!')
hello()
运行结果如下:
这样的程序代码执行起来不依赖变化的数据,只和内部信息的数据有关,实际上我们看print()是有参数输入的,这些参数只有在程序执行时有限,程序运行后就丢失了,就像一个临时的变量。
那么既然有输入变量(变元),也可以有输出变量,例如:
def sum3(a1, a2, a3):
return a1+a2+a3
print('Please enter the first number')
a = int(input())
print('Please enter the second number')
b = int(input())
print('Please enter the three number')
c = int(input())
sum1 = sum3(a, b, c)
print('The sum of the three numbers: ' + str(sum1))
在上面的程序里我们创建可以求和的子程序,并结合了按键输入检测input()以及强制转换等内容,通过键入3个数字,最终输出他们的和:
在 Python 中有一个值称为 None,它表示没有值。None 是 NoneType 数据类型的唯一值(其他编程语言可能称这个值为 null、nil 或 undefined)。就像布尔值 True 和 False 一样,None 必须大写首字母 N。看到了开头大写的名称都是特殊的。所有没有 return 语句的函数定义,Python 都会在末尾加上 return None。这类似于 while 或 for 循环隐式地以 continue 语句结尾。而且,如果使用不带值的 return 语句(也就是只有 return 关键字本身),那么就返回 None。
作为输入参数,print() 函数可以输入关键字参数,例如 end 关键字参数,他可以将前后内容连载一起,而不是默认结束;传入 sep 关键字参数,替换掉默认的分隔字符串:
print('Hello ', end='')
print('Here are three separate strings:')
print('cats', 'dogs', 'mice')
print('cats', 'dogs', 'mice', sep=',')
效果如下:
局部以及全局变量:
作用域是编程中用于界定变量可见性和生命周期的概念。在Python中,变量根据其被赋值的位置,被划分为局部作用域或全局作用域。当一个变量在函数内部被赋值时,它属于该函数的局部作用域。这些局部变量仅在该函数内部可见,并在函数执行完毕后被销毁。每次函数被调用时,都会创建新的局部作用域,其内部的变量不会保留上一次调用的值。
另一方面,在函数外部定义的变量属于全局作用域。全局变量在整个程序运行期间都保持其值,并在程序开始时创建,在程序结束时销毁。如果程序重新启动,全局变量将丢失其值,除非它们在程序中被明确初始化。
作用域的重要性体现在以下几个方面:
全局作用域的代码不能直接访问或修改局部变量。
然而,局部作用域的代码可以访问并可能修改全局变量(尽管这通常不是推荐的做法)。
一个函数的局部作用域中的代码不能访问其他函数的局部作用域中的变量。
相同的变量名可以在不同的作用域中使用,而不会相互干扰,因为它们是独立的实体。
Python通过区分不同作用域来管理变量的可见性和生命周期,这有助于减少程序中的错误和复杂性。通过将变量的作用域限制在特定的函数或模块内,我们可以减少变量之间的潜在冲突,并更容易地追踪和理解变量的来源和用途。管在小规模的程序中使用全局变量可能不是一个大问题,但随着程序规模的扩大,过度依赖全局变量通常被认为是一个不良的实践。这会导致代码难以维护和理解,并增加出错的可能性。因此,更好的做法是通过函数参数和返回值来传递数据,而不是依赖全局变量。
注意:
不同作用域的同名变量是不同的;
如果使用global 语句修改全局变量,这个时候就不能在这个作用域里面创建同名局部变量名了;
变量没有进行赋值操作那么就还是一个全局变量。
|