【纯文本教程】大学专科的Python基础开发课?p=10

“Python基础开发”课程_课堂笔记(HTML版_010)

Class notes of "Python basic development",this webPage is tenth page.

本页面没有“代码demo索引”。


3.2 Python变量范围

3.2.1 教学目标

在程序我们看到主程序中包含了函数,在函数内部有自己的变量,在主程序也有自己的变量,那么这些变量是什么关系,怎么样在函数内部使用主程序的变量。

我们(在这小节)的任务就是要分清这些变量的性质,掌握局部变量与全局变量的使用

3.2.2 局部变量

局部变量也称为内部变量,局部变量是在函数内作定义说明的,其作用域仅限于函数内,离开该函数后再使用这种变量是非法的。

以下是本知识点的示例代码:

def sum(m) :
 s=0
 for p in range(m+1):
  s=s+p#计算(1+2+...+m)的和
return s
#上面是函数体,下面是主程序
m= 10
s= sum (m)
print(s)p

上面这个例子中的p就是“局部变量”,只能够在定义它的函数中使用,而不能够在其它函数中使用,同时,一个函数中,也不能使用其它函数中定义的变量。

各个函数是相对独立的(平行关系)每个函数都分配在自己的区域,(局部变量)互不相干。

函数之间,可以互相调用(在一个函数中调用另一个函数整体)

——“形式参数”是“被调函数”的局部变量;

——“实际参数”是“主调函数”的局部变量;

——允许在不同的函数中使用同名变量(好吧,其实是因为互不相干,没什么好滑稽的)

示例代码:

def fun(x,y):
 print("In fun:")
 x = 1
 y = 2#这两行赋值代码是无效的

x = 1048576#1024的平方
y = 1073741824#1024的立方
fun(x,y)
print(x,y) #主程序中的局部变量

3.2.3 全局变量

全局变量的作用域是整个程序。

如果一个函数内部要用到主程序的变量,那么可以在这个函数内部声明这个变量为global变量,这样函数内部用的就是主程序的变量了。当在函数中改变了全局变量的值时,会直接影响到主程序这个变量的值。

下面这个例子,仅用于解说“全局变量的作用域”,离开了教程,没有实际用途,因此不加入索引列表。

def fun(x) :
 global y#声明这是一个全局变量(fun中的变量y不是fun本地的局部变量,而是主程序的全局变量)
 y=0
 x=0

x=1
y=2
fun(x)
print(x, y)
执行该程序结果为:
1 0

然后,可以多做几个关于全局变量的实例,同样,不加入索引列表。

def A(x) :
 global y#声明这是一个全局变量
 y = 0
 x = 0
#这两个函数,是平行关系
def B(x):
 global y
 y = 10
 x = 0

x = 1
y = 2
A(x)
B(y)
print(x, y)#1,10

因为在A、B两个函数中,都使用了全局变量关键字“global”定义了全局变量y,声明了变量y不是本地的(局部)变量,而是主程序中的(全局)变量。

3.2.4 两种变量

  • 第一,全局变量的作用域,是整个程序,在程序开始的时候就存在,任何函数都可以访问(全局变量),而且全部函数访问的同名称全局变量,都是同一个变量,它只在程序结束时,才销毁。
  • 第二,局部变量是只在函数内部使用的变量,当执行此函数时,才有效,退出函数后,局部变量就会被销毁。不同函数之间的局部变量是不同的,同名变量无关。
  • 第三,局部变量有局部性,这使得函数有对立性,函数与外界的接口只有函数参数与它的返回值,使程序的模块化更突出,这样有利于开发大型的程序。 全局变量具有全局性,是实现函数之间数据交换的公共途径,但大量地使用全局变量会破坏函数的独立性,导致程序的模块化程度下降,因此要尽量减少使用全局变量,多使用局部变量,函数之间应尽量保持其独立性,函数之间最好只通过接口参数来传递数据。

3.3 函数调用

在Python语言中,所有的函数定义,包括主函数主程序在内都是平行的。

函数之间允许相互调用,也允许嵌套调用,习惯上把调用者称为主调函数。

我们(在这小节)的任务就是来掌握函数的调用关系,掌握参数传递的规则。

程序的执行总是从主程序函数开始,完成对其它函数的调用后再返回到主程序函数,最后由主程序函数结束整个程序。

嵌套调用就是一个函数调用另外一个函数,被调用的函数又进一步调用另外一个函数,形成一层层的嵌套关系,一个复杂的程序存在多层的函数调用。

main
 link start!
 function A#主程序函数首先调用A函数,在A函数中调用了B函数,在B函数中调用了C函数;
  function B# C函数执行结束后,返回B函数的调用处,程序继续执行B函数;
   function C# B函数执行结束后,返回A函数的调用处,程序继续执行A函数;
  function D# A函数又调用了函数D,D函数执行结束后,返回A函数的调用处,程序继续执行A函数;
 mission passed# A函数执行结束后,返回主程序函数的调用处,主程序继续执行,直到结束。
end of run
#不知道是由于什么原因,我个人写网页和Word文档,很不喜欢插入图片(感觉就是那种能不插入图片,就尽量用文字描述图片内容)

综上所述,程序结构如下:

def D():
 return 1

def C():
 return 2

def B():
 print("Program running,function B")
 C()#在B函数中调用了C函数
 return 3

def A():
 print("Program running,function A")
 B()#A函数先调用了B函数
 print("Program running,function D")
 D()#A函数后才调用D函数
#Python的习惯是,在自定义函数写完之后,再来写主程序
...
A()#在主程序中只调用了A函数


函数调用可以这样一层层嵌套下去,但是禁止出现“死循环”!(两个函数反复调用,永不退出)

【例题】计算1+(1+2)+(1+2+3)+...+(1+2+3+…+n)的结果

def sum(m):
 s = 0
 for n in range(1,m+1):
  s = s+n#累加
 return s

def sumAll(n):
 s = 0
 for m in range(1,n+1):
  s = s+sum(m)#调用上一个自定义函数
 return s
#下面开始写主程序
n = int(input("n="))
print("1+(1+2)+(1+2+3)+...+(1+2+3+…+"+str(n)+")="+str(sumAll(n)))

运行程序,拿5举例子:

>>>
====================== RESTART: D:\code\Python2020_demo.py =====================
n=5
1+(1+2)+(1+2+3)+...+(1+2+3+…+5)=35
>>>

运行程序,拿10举例子:

>>>
====================== RESTART: D:\code\Python2020_demo.py =====================
n=10
1+(1+2)+(1+2+3)+...+(1+2+3+…+10)=220
>>>

【例题】分解质因数(老师当时没有运行,我的运行结果显示,需要跳过1,算是不完美,因此不加入索引)

def prime(m):
 for n in range(2,m):
  if m%n ==0:
   return
 return 1

n = int(input("正整数:"))
for p in range(1,n+1):
 if n%p == 0 and prime(p) == 1:
  print(p)

3.4 函数默认参数

3.4.1教学目标

在Python语言中定义函数时可以预先为部分参数设置默认值,这样的好处是实际调用时可以不提供该参数的实际值,该参数使用默认值,我们(在这小节)的任务就是来掌握函数参数默认值的规则。

3.4.2 默认参数的使用

函数默认参数就是在函数定义时为一些参数预先设定一个值, 在调用时如果不提供这个参数的实际值就使用默认的参数值。(示例略,离开教程后,无实际用途)

3.4.2 默认参数的位置

“位置参数”是函数在定义时,写在小括号里面的空白变量,要写在靠前的位置;

“键值参数”是函数在定义时,已经在小括号内赋予初值的变量,要写在靠后的位置。

Python规定,有默认值的键值参数,必须出现在,没有默认值的位置参数,后面。

例如下面函数是正确的:

def fun(a, b=1,c=2): #a是“位置参数”,b和c被称为“键值参数”。
print(a, b, c)

但是下面函数是错误的:

def fun(a=0,b,c=2):
print(a, b, c)


第10堂课,内容为Python变量和函数调用,以及函数默认参数。

本页面(?p=10)的实际上课时间为2020年4月28日第2小节课。

后面这两个小节课(“p=11”和“p=12”),是“实训课”,基本没有讲理论,直接删除这两“p”(webPage),直接跳到“p=13”。

粗略提及“p=11”和“p=12”的内容:

  1. 第一个是计算最大公因数与最小公倍数
  2. 第二个是用两个自定义函数和两个全局变量,将输入和输出分开
  3. 第三个是用自定义函数验证哥德巴赫猜想,使程序简洁
  4. 第四个是在cmd里面,用print函数了解“help()”函数
  5. 最后下课之前,提到了交作业的程序的第一行代码要“print("自己的姓名")”

本“p”结束,下一“p”为“p=13”。

猜你喜欢

转载自www.cnblogs.com/Robot-DX3906/p/12964644.html