python-19-函数:我的地盘听我的

1.函数与过程

函数:有返回值

过程:简单的、特殊的、没有返回值

python只有函数没有过程

2.再谈返回值

>>> def back():

return [1,'wo',3.14]

>>> back()
[1, 'wo', 3.14]
>>> def back():

return 1,3.14,'小甲鱼'

>>> back()
(1, 3.14, '小甲鱼')这里是返回了个元组。

3.函数变量的作用域(变量的可见性)

在函数里面定义的变量是局部变量,被存储在栈里

全局变量作用域是整个代码段

def discounts(price,rate):
final_price=price*rate
print('这里试图打印全局变量old_price的值:',old_price)
return final_price
old_price=float(input('请输入原价:'))
rate=float(input('请输入折扣率:'))
new_price=discounts(old_price,rate)

print('打折后的价格是:',new_price)

请输入原价:100
请输入折扣率:0.8
这里试图打印全局变量old_price的值: 100.0

打折后的价格是: 80.0

4.在函数内,去修改全局变量的时候,会创建一个新的名字一样的局部变量,但是外部的全局变量不变。因为两个变量存储的空间不一样。

可以在函数内部去使用它,但是不要试图去修改他。

def discounts(price,rate):
    final_price=price*rate
   # print('这里试图打印全局变量old_price的值:',old_price)
    old_price=50
    print('修改后的全局变量1:',old_price)
    return final_price
old_price=float(input('请输入原价:'))
rate=float(input('请输入折扣率:'))
new_price=discounts(old_price,rate)
print('修改后的全局变量为2:',old_price)
print('打折后的价格是:',new_price)

请输入原价:100
请输入折扣率:0.8
修改后的全局变量1: 50
修改后的全局变量为2: 100.0
打折后的价格是: 80.0

下边程序会输入什么?

    def next():  
        print('我在next()函数里...')  
        pre()  
    def pre():  
        print('我在pre()函数里...')  

    next()  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

答: 
我在next()函数里… 
我在pre()函数里…

请问以下这个函数有返回值吗?

    def hello():  
            print('Hello FishC!')  
  • 1
  • 2

答:有。 会返回一个None的对象 
如果没有使用return语句指定返回值,Python也不是什么都不返回的,Ta会返回一个None对象,所以我们说Python所有的函数都有返回值。

请问Python的return语句可以返回多个不同类型的值吗?

答:可以,默认用逗号隔开,是以元祖的形式返回,你当然也可以用列表包含起来返回:

    >>> def myFun():  
            return '测试测试', 520, 3.14, True  
    >>> myFun()  
    ('测试测试', 520, 3.14, True)  
    >>> def myFun2():  
            return ['小甲鱼', 1314, 5.12, False]  
    >>> myFun2()  
    ['小甲鱼', 1314, 5.12, False]  
    >>>  

目测以下程序会打印什么内容:

    def fun(var):  
        var = 1314  
        print(var, end='')  
    var = 520  
    fun(var)  
    print(var)  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

答:1314 
520

小甲鱼建议不到万不得已不要使用全局变量,简洁的概括为: 

a) 代码可读性变差  

b) 代码安全性降低以下关于全局变量的危言耸听是转来的,大家不妨也看下:  

a) 它会造成不必要的常量频繁使用,特别当这个常量没有用宏定义“正名”时,代码阅读起来将万分吃力。  

b) 它会导致软件分层的不合理,全局变量相当于一条快捷通道,它容易使程序员模糊了“设备层”和“应用层”之间的边界。写出来的底层程序容易自作多情地关注起上层的应用。这在软件系统的构建初期的确效率很高,功能调试进度一日千里,但到了后期往往bug一堆,处处“补丁”,雷区遍布。说是度日如年举步维艰也不为过。  

c) 由于软件的分层不合理,到了后期维护,哪怕仅是增加修改删除小功能,往往要从上到下掘地三尺地修改,涉及大多数模块,而原有的代码注释却忘了更新修改,这个时候,交给后来维护者的系统会越来越像一个“泥潭”,注释的唯一作用只是使泥潭上方再加一些迷烟瘴气。  

d) 全局变量大量使用,少不了有些变量流连忘返于中断与主回圈程序之间。这个时候如果处理不当,系统的bug就是随机出现的,无规律的,这时候初步显示出病入膏肓的特征来了,没有大牛来力挽狂澜,注定慢性死亡。 

e) 无需多言,如果您的系统中大量使用全局变量,那么您已经成功得到一个畸形的系统,它处于一个神秘的稳定状态!你看着这台机器,机器也看着你,相对无言,心中发毛。你不确定它什么时候会崩溃,也不晓得下一次投诉什么时候道理。

编写一个函数,判断传入的字符串参数是否为“回文联”(回文联即用回文形式写成的对联,既可顺读,也可倒读。例如:上海自来水来自海上) 
def HuiWen():
    str1=input('请输入一句话:')
    length=len(str1)
    length1=length//2
    for i in range(length):
        if str1[i]==str1[length-i-1]:
            #if str1[i]==str1[length1-i-1]:
                #print('%s不是回文联!'%str1)
                #break
            #else:
            print('%s是回文联!'%str1)
            break
        else:
            print('%s不是回文联!'%str1)
            break

编写一个函数,分别统计出传入字符串参数(可能不只一个参数)的英文字母、空格、数字和其它字符的个数

在这里param是收集参数,访问的时候跟访问二维数组一样,先访问外层,再访问内层

def CountNum(*param):

        phanum1=0
        spanum2=0
        num3=0
        other=0
        for str1 in param:
            for j in str1:
                if 'a'<=j<='z' or 'A'<=j<='Z':
                    phanum1+=1
                elif j==' ':
                    spanum2+=1
                elif '0'<=j<='9':
                    num3+=1
                else:
                    other+=1
        print('字母字符的个数为%d,空格字符的个数为%d,数字的个数为%d,其他字符的个数为%d'%(phanum1,spanum2,num3,other))
    


你可能感兴趣的:(技术类)