Java教程

12月28日课程总结

本文主要是介绍12月28日课程总结,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

今天主要学习了以下几部分内容

  • 变量的作用域( 全局变量和局部变量)

一、全局变量

a = 100 #全局变量

def f1():

global a #如果要在函数内改变全局变量的值,增加 global 关键字声明

print(a) #打印全局变量 a 的值

a = 300

f1()

print(a)

二、全局变量与局部变量

a = 100
def f1(a,b,c):
print(a,b,c)
print(locals()) #打印输出的局部变量
print("#"*20)
print(globals()) #打印输出的全局变量
f1(2,3,4)

三、传递可变对象的引用

1、传递可变对象的引用
传递参数是可变对象(例如:列表、字典、自定义的其他可变对象等),实际传递的还是对
象的引用。在函数体中不创建新的对象拷贝,而是可以直接修改所传递的对象。

b = [10,20]
def f2(m):
print("m:",id(m)) #b 和 m 是同一个对象
m.append(30) #由于 m 是可变对象,不创建对象拷贝,直接修改这个对象
f2(b)
print("b:",id(b))
print(b)

执行结果:
m: 45765960
b: 45765960
[10, 20, 30]

2、传递不可变对象的引用

传递参数是不可变对象(例如:int、float、字符串、元组、布尔值),实际传递的还是对
象的引用。在”赋值操作”时,由于不可变对象无法修改,系统会新创建一个对象。

a = 100
def f1(n):
print("n:",id(n)) #传递进来的是 a 对象的地址
n = n+200 #由于 a 是不可变对象,因此创建新的对象 n
print("n:",id(n)) #n 已经变成了新的对象
print(n)
f1(a)
print("a:",id(a))

执行结果:
n: 1663816464
n: 46608592
300
a: 1663816464

四、浅拷贝和深拷贝
浅拷贝:不拷贝子对象的内容,只是拷贝子对象的引用。
深拷贝:会连子对象的内存也全部拷贝一份,对子对象的修改不会影响源对象

五、递归函数
递归函数指的是:自己调用自己的函数,在函数体内部直接或间接的自己调用自己。 每个递归函数必须包含两个部分:
1. 终止条件
表示递归什么时候结束。一般用于返回值,不再调用自己。
2. 递归步骤
把第 n 步的值和第 n-1 步相关联。

def factorial(n):
if n==1:return 1
return n*factorial(n-1)
for i in range(1,6):
print(i,'!=',factorial(i))

执行结果:
1 != 1
2 != 2
3 != 6
4 != 24
5!=120

这篇关于12月28日课程总结的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!