函数的返回值

函数和过程
函数与过程其实是分开的,一般认为函数function是有返回值的,而过程procedure是简单,特殊且没有返回值的。
而在python中,严格来说是不存在过程的,只有函数,

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

	
>>> print(hello())
hello~
None

为何会打印两行文字,在不写return语句的时候,默认python会认为函数是return none的,所以说python所有函数都是有返回值。

返回值
在其他编程语言环境下,我们说一个函数是整型的,是说函数会返回一个整型的返回值,但是在python中不会这样,python可以动态确定函数的类型,而且函数还能返回不同类型的值,还可以同时返回多个值。

>>> def network():
	return ['hcia','hcip','hcie']

>>> network()
['hcia', 'hcip', 'hcie']

python也可以用列表打包多种类型的值一次性返回,也可以用元组的形式返回多个值。

函数变量的作用域
一般的编程语言都有局部变量与全局变量

def discounts(price,rate):
	final_price = price * rate
	return final_price

old_price = float(input('请输入原价:'))
rate = float(input('请输入折扣率:'))
new_price = discounts(old_price,rate)
print('打折后的价格是: ',new_price)
请输入原价:80
请输入折扣率:0.75
打折后的价格是:  60.0

此时,不论是price还是rate,或者是final_price,都是函数discounts的局部变量。

def discounts(price,rate):
	final_price = price * rate
	return final_price

old_price = float(input('请输入原价:'))
rate = float(input('请输入折扣率:'))
new_price = discounts(old_price,rate)
print('打折后的价格是: ',new_price
print('这里试图打印局部变量final_price的值:',final_price)

执行到最后一句就会出错,这是因为final_price没有被定义过,也就是说python是找不到这个变量的,所以是一个局部变量,作用范围只会在discounts()函数的定义范围内。

总结:在函数里边定义的参数以及变量都成为局部变量,出了这个函数,这些变量就没用了。这是因为python在进行函数的时候,利用栈进行存储,当执行完函数的时候,函数中的所有数据都会被删除,所以函数外边是无法访问到函数内部的局部变量的。

而全局变量并没有此限制,即便是在函数内也可以使用,但是如果去修改了全局变量,就会使得程序发生异常?

def discounts(price,rate):
     final_price = price * rate
     old_price = 50  #这里试图修改全局变量
     print('在局部变量中修改后old_price的值是: ',old_price)
     return final_price


old_price = float(input('请输入原价: '))
rate = float(input('请输入折扣率:'))
new_price = discounts(old_price,rate)
print('全局变量old_price现在的值是:',old_price)
print('打折后价格是: ',new_price)

请输入原价: 80
请输入折扣率:0.75
在局部变量中修改后old_price的值是:  50
全局变量old_price现在的值是: 80.0
打折后价格是:  60.0

如果在函数内部试图修改全局变量,那么python会创建一个新的局部变量替代,名字与全局变量一致,但是真正的全局变量是不会改变的,所以程序没有出现意外。

课后题
1.下面的程序会输出什么?

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

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

2.以下函数有返回值吗?

>>> def hello():
        print('Hello FishC!')

3.请问python的return语句可以返回多个不同类型的值吗?
4.以下程序会打印什么内容?

def fun(var):
    var = 1314
    print(var, end='')

var = 520
fun(var)
print(var)

5.以下程序会打印什么内容?

var = ' Hi '

def fun1():
    global var
    var = ' Baby '
    return fun2(var)

def fun2(var):
    var += 'I love you'
    fun3(var)
    return var

def fun3(var):
    var = ' 小甲鱼 '

print(fun1())

解:
1.我在next()函数里…
我在pre()函数里…

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

3.可以的,以元组或者列表的形式

4.1314520
5. Baby I love you

动手题:
1.编写一个函数,判断传入的字符串参数是否为“回文联”(回文联即用回文形式写成的对联,既可顺读,也可倒读。例如:上海自来水来自海上)

def palindrome(string):
    list1 = list(string)
    list2 = reversed(list1)
    if list1 == list(list2):
        return '是回文联!'
    else:
        return '不是回文联!'
print(palindrome('上海自来水来自海上'))

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

def count(*param):
    length = len(param)
    for i in range(length):
        letters = 0
        space = 0
        digit = 0
        others = 0
        for each in param[i]:
            if each.isalpha():
                letters += 1
            elif each.isdigit():
                digit += 1
            elif each == ' ':
                space += 1
            else:
                others += 1
        print('第 %d 个字符串共有:英文字母 %d 个,数字 %d 个,空格 %d 个,其他字符 %d 个。' % (i+1, letters, digit, space, others))
            
count('I love fishc.com.', 'I love you, you love me.')
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值