python学习笔记(持续更新中)

python版本: 3.X

for循环

  1. 表示从0到4:
for x in range(5):
	print(x)

2. 循环特定的几个数字
for x in (1,4,12,2):
	print(x)

此时x依次为 1,4,12,2

for x in [1,4,12,2]:
	print(x)

此时x依次为 1,4,12,2


3. 指定从几开始循环
    x从0开始,到 <10 结束,每次加3

for i in range(0, 10, 3) :
    print(i)

x依次为0,3,6,9


x从-10开始,到<-100结束,每次-30

for i in range(-10, -100, -30) :
    print(i)

x依次为-10,-40,-70


5.
6.

global

  1. 第1种情况
number=1
def test():
	print(number1)

此时输出1

  1. 第2种情况
number=1
def test():
	print(number1)
	global number1;

此时, global number1这行则会报错:SyntaxError: name ‘number1’ is used prior to global declaration


3. 第3种情况

将代码改成:

number=1
def test():
	global number1;
	print(number1)

此时运行正常。


4. 第4种情况
若将代码改成:

number=1
def test():
	print(number1)
	number1=22

则报错:UnboundLocalError: local variable ‘number1’ referenced before assignment

说实话,我也没闹懂为啥。。。。
建议看这: https://www.cnblogs.com/snake-hand/archive/2013/06/16/3138866.html

引用传递和值传递

java的方法有引用传递和值传递这么一说,个人觉得python都是引用传递。只要用=重新赋值,就相当于java的new。但如果没有重新赋值而是进行操作,则会对方法外的变量生效。

  1. 第1种情况
def test(a):
	a.append(4)
	print(a)

a=[1,2,3]
test(a)
print(a)

则两次都输出[1,2,3,4],说明是引用传递。


  1. 第2种情况
    但如果使用=重新赋值,相当于new,此时对方法内的改变对方法外的实参不会生效。
def test(a):
	a=[1,2,3,4]
	print(a)

a=[1,2,3]
test(a)
print(a)

先输出[1,2,3,4], 再输出[1,2,3]

  1. 若对形参操作后再重新赋值,则重新赋值前的操作对实参仍然生效;赋值后的操作对实参无效。
def test(a):
	a.append(5)
	a=[1,2,3,4]
	print(a)

a=[1,2,3]
test(a)
print(a)

先输出[1,2,3,4],再输出[1,2,3,5]

  1. 加上global,会怎么样?
def test(a):
	global a
	a.append(4)
	print(a)

a=[1,2,3]
test(a)
print(a)

global a那行报错: SyntaxError: name ‘a’ is parameter and global

但如果把形参a去掉,

def test():
	global a
	a=[1,2,3,4]
	print(a)

a=[1,2,3]
test(a)
print(a)

则两次都输出[1,2,3,4]
结论:java的引用传递用在python里一模一样。

发布了48 篇原创文章 · 获赞 36 · 访问量 13万+

猜你喜欢

转载自blog.csdn.net/weixin_42845682/article/details/84405150