019 Python初学笔记--函数的返回值+变量的作用范围

1.Python所有的函数都有返回值(当函数没有return语句时,python会返回一个None)

>>> def print1():
	print('hello')

	
>>> temp=print1()
hello
>>> temp
>>>
>>> print(temp)
None
>>> type(temp)
<class 'NoneType'>

2.Python可以返回多个不同类型的值。默认以逗号隔开,是以元组的形式返回。当然也可以用列表包含起来返回。

 >>> def print2():
	return 1,'heihei',1.2

>>> print2()
(1, 'heihei', 1.2)


>>> def print3():
	return [1,'love',1.2]

>>> print3()
[1, 'love', 1.2]

3.变量分为局部变量(local variable)和全局变量(global variable):

①全局变量和局部变量的作用域

def add(local_a,local_b):
    local_sum=local_a+local_b
    print('全局变量globle_a=:',globle_a)
    print('全局变量globle_b=:',globle_b)
    return local_sum

globle_a=1
globle_b=2
globle_sum=add(globle_a,globle_b)
print('程序运行的结果是:globle_a+globle_b=',globle_sum)
print('试图访问局部变量local_a:',local_a)  #试图访问函数的局部变量


#运行结果:
全局变量globle_a=: 1
全局变量globle_b=: 2
程序运行的结果是:globle_a+globle_b= 3
Traceback (most recent call last):
  File "F:/学习/python/019_practice.py", line 11, in <module>
    print('试图访问局部变量local_a:',local_a)  #试图访问函数的局部变量
NameError: name 'local_a' is not defined

注:函数里面定义的变量是局部变量,当函数执行完之后,该函数会被自动删除,所以在函数的外部无法访问函数的局部变量。函数外定义的变量是全局变量,全局变量作用于整个代码段。

②试图在函数中修改全局变量(下列代码为什么修改失败了)

def add(local_a,local_b):
    local_sum=local_a+local_b
    #print('全局变量globle_a=:',globle_a)
    #print('全局变量globle_b=:',globle_b)
    #试图修改全局变量
    globle_a=10
    globle_b=20
    print('试图修改后的globle_a=:',globle_a)
    print('试图修改后的globle_b=:',globle_a)
    return local_sum

globle_a=1
globle_b=2
globle_sum=add(globle_a,globle_b)
print('globle_a=:',globle_a)
print('globle_b=:',globle_b)
print('程序运行的结果是:globle_a+globle_b=',globle_sum)

#运行结果:
试图修改后的globle_a=: 10
试图修改后的globle_b=: 10
globle_a=: 1
globle_b=: 2
程序运行的结果是:globle_a+globle_b= 3
>>> 

注:上面程序在函数内部试图修改全局变量,python会在函数内部重新定义一个与全局变量名称相同的局部变量,使得所有对全局变量的修改都是无效的。(虽然可以在函数中修改全局变量的值,但是最好不要试图在函数内部修改全局变量)

a=1
def add():
    #试图在修改全局变量前访问全局变量
    print('全局变量a=:',a)
    #试图修改全局变量
    a=10

add()

#运行结果:
UnboundLocalError: local variable 'a' referenced before assignment

 注:Python为了保护变量的作用域,所以将add函数意外的变量屏蔽起来,此时是无法访问到此函数外的a变量

练习1:下面程序会打印什么内容:

st='hello world'

def function1():
    global st
    st='I '
    return function2(st)

def function2(st):
    st+='love you'
    function3(st)
    return st

def function3(st):
    st='你好'
    
print(function1())
print(st)

#打印结果:
I love you
I 
>>> 

注1:在函数中重新声明的全局变量覆盖了原来的全局变量,新的全局变量在函数调用时并没有发生改变。

注2:函数3没有返回值,所以函数2相当于没有调用函数3

注3:使用全局变量会使:代码的可读性变差、代码安全性降低;

练习2:编写一个函数判断字符串是否为回文联(回文联:正读倒读都一样,例如:上海自来水来自海上)

#方法1:使用列表的逆置函数
def judge(st):
    st=list(st)
    st1=st
    st2=list(reversed(st1))  #逆置列表,返回一个迭代器对象
    
    if st1==st2:
        print('是回文联')
    else:
        print('不是回文联')
judge('上海自来水来自海上')
#方法2:使用for循环
def judge2(st):
    flag=1
    length=len(st)//2
    j=len(st)-1
    for i in range(length):
        if st[i]!=st[j]:
            flag=0
            break
        j-=1
    if flag==0:
        print('不是回文联')
    else:
        print('是回文联')
judge2('上海自来水来自海上')

练习3:编写一个函数,统计传入函数的各种类型参数(字母、数字、其他参数)的个数

def judge3(*params):
    length=len(params)
    for i in range(length):
        letters=0
        digits=0
        others=0
        for each in params[i]:
            if each.isalpha():
                letters+=1
            elif each.isdigit():
                digits+=1
            else:
                others+=1
        print('第{0}个字符串共有:{1}个字母,{2}个数字,{3}个其他字符'.format(i,letters,digits,others))
judge3('12aa..','sss')
    

#运行结果 :
第0个字符串共有:2个字母,2个数字,2个其他字符
第1个字符串共有:3个字母,0个数字,0个其他字符

猜你喜欢

转载自blog.csdn.net/beautiful77moon/article/details/86777351