1.函数的返回值
1) 过程(procedure)是简单、特殊并且无返回值的;
2) 函数(Function)是有返回值的。
python严格来说,只有函数,没有过程。当没有写返回值时,python函数默认返回None。举例说明:

def hello():print('Hello World')
temp = hello()  #由于这里调用了hello()函数,故输出:Hello World
#此时,看似hello的运行结果'Hello World'已经被赋给了temp,实际上
#temp是空的。
print(temp)   #输出;None
print(type(temp))   #输出;<class 'NoneType'>
#因为hello()函数没有返回值,所以函数执行完并没有返回任何东西。

3) python是可以同时返回多个类型的值的。

def back():return [1, 3.14, 'python']print(back())   #输出:[1, 3.14, 'python']

注意:一般返回值用逗号隔开时,默认是以元组的形式返回的。加上了中括号就以列表的形式返回。
2.局部变量和全局变量
关于全局变量和局部变量的概念很好理解,不再赘述。这里只以一个程序为例来说明:

def discounts(price, rate):final_price = price * rateold_price = 88    #这里试图修改全局变量print('在函数内部修改后,old_price的值是:', old_price)return final_priceold_price = float(input('请输入原价:'))
rate = float(input('请输入折扣率:'))
new_price = discounts(old_price, rate)
print('在函数外部打印的old_price的值是:', old_price)
print('打折后价格是:', new_price)

运行结果:
值得注意的是,将局部变量名定义得和全局变量一样是一种很不可取的行为
3.思考与练习
下面来讲解几个例子,以及一些思考:
1.编写一个符合下列要求的函数:
a)计算机打印所有参数的和乘以基数(base=3)的结果
b)如果参数中最后一个参数为(base=5),则设定基数为5,基数不参与求和计算

print('*' * 25)
def counts(*params, base = 3):result = 0for x in params:result = result + xnum = result * baseprint(num)counts(1,2,3,4,5, base = 5)

运行结果:
2.寻找自幂数
如果一个3位数等于其各位数字的立方和,则这个数被称为水仙花数。例如153=1^3+5^3+3^3,因此153是一个水仙花数。同理,如果一个4位数等于其各位数字的4次方和,则这个数被称为四叶玫瑰数。例如1634=1^4+6^4+3^4+4^4,因此1634是一个四叶玫瑰数。符合上面这种规律的都叫做自幂数。

def Find(x1, x2):list2 = []               for a in range(x1, x2):  CopyNum = a          #CopyNum是用来和result(即每位数的立方和)做比较的。相同即是水仙花数。由于a在循环中会发生变化,所以在循环外先复制了a,以便在循环结束后能与result比较。   list1 = []           while a>=10:         #当a>=10时,说明该数还没有除到个位上,应继续循环。【注意!】如果这里没有加等号(a>10),则程序会把‘1001’拆成[10、0、1],从而导致计算错误b = a % 10      a = a // 10      list1.append(b)  list1.append(a)      #别忘了除到最后a<10时,a为原来的最高位,也要放到list1中,不然拆开的数会缺最高位list1.reverse()      #列表中的数是由最低位排到最高位的,这里翻转,由最高位排到最低位,符合正常的阅读习惯result = 0           length1 = len(list1) for x in list1:     result = result + x**length1   #计算幂次方和if result == CopyNum:              #如果幂次方和result等于最开始输入的a(CopyNum是a的副本),则为自幂数。list2.append(result)           print('该范围内共有%d个自幂数,分别为:' %len(list2))print(list2)                           max_num = int(input('请输入寻找自幂数的范围:'))
Find(0, max_num)

运行结果:
3.编写一个函数findstr()
该函数统计一个长度为2的子字符串在另一个字符串中出现的次数。例如:假定输入的字符串为:"You cannot improve your past, but you can improve your future. Once time is wasted, life is wasted.",子字符串为:"im",函数执行后打印"子字符串在目标字符串中共出现3次"。

def Findstr(str1, str2):  #str1为目标字符串,str2为要寻找的字符串counts = 0           length = len(str1)   for x in range(length-1):  #遍历目标字符串每一个字符if (str1[x] == str2[0])and(str1[x+1] == str2[1]): #如果目标字符串中出现与子字符串匹配的字符串counts = counts + 1    #counts增加1print('该子字符串在目标字符串中共出现%d次!'%counts)str1 = input('请输入目标字符串;')
str2 = input('请输入您要查找的字符串:')
Findstr(str1, str2)

运行结果:
4.想一想:下面的程序会输出什么?

var = ' Hi '                #初始化vardef fun1():               global var       #global关键字可以在局部作用域中修改全局变量var = ' Baby '   #此处var = 'Baby'return fun2(var) #fun1()的返回值为fun2(baby)(即Baby I love you)def fun2(var):       var += 'I love you' #此处var = Baby I love youfun3(var)         #fun3()无返回值,此处无作用,var不变return var        #返回Baby I love youdef fun3(var):var = '小甲鱼'print(fun1()) 

运行结果:
【警示】:不到万不得已,不要使用全局变量,原因如下:
1.代码可读性变差
2.代码安全性降低
5.编写一个函数
判断传入的字符串参数是否为“回文联”(回文联即用回文形式写成的对联,既可顺读,也可以倒读。例如:上海自来水来自海上)
【方法一】

def palindrome(string):length = len(string)last = length - 1length = length // 2flag = 1for each in range(length):if string[each] != string[last]:flag = 0last = last -1if flag == 1:return 1else:return 0string = input('请输入一句话:')
if palindrome(string) == 1:print('是回文联!')
else:print('不是回文联!')

【方法二】这个方法比方法一简单很多!

def palindrome(string):list1 = list(string)list2 = reversed(list1)    #reversed()的用法见class17序列的130行if list1 == list(list2):print('是回文联!')else:print('不是回文联!')string = input('请输入一句话1:')
palindrome(string)

运行结果:

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

def count(*param):length = len(param)  #统计有几个参数,注意,此处的param是个列表for i in range(length):letters = 0space = 0digit = 0others = 0for each in param[i]:if each.isalpha():letters += 1elif each.isdigit():digit += 1elif each == ' ':space += 1else:others += 1print('第%d个字符串有:英文字母%d个,数字%d个,空格%d个,其他字符%d个。'%(i+1,letters, digit, space, others))count('adsfasfasdf','水电 费剪短发卡机了33','3433241')

运行结果:

python学习027-----python之函数(三):函数返回值、局部变量与全局变量相关推荐

  1. Python学习笔记——for循环和range函数

    Python学习笔记--for循环和range函数 Python的for循环 for 目标 in 表达式 :循环体 案例一 >>> example = 'abcdef' >&g ...

  2. python学习笔记(五)---替换函数

    python学习笔记(五)-替换函数 replace()函数替换内容 用法: replace('需要替换的内容','替换后的内容',替换次数) 备:如果需要替换单引号需要加'\' 例子: str = ...

  3. python函数参数学习_python学习笔记-11.函数参数和返回值进阶

    1. 函数参数和返回值的作用 函数根据有没有参数以及有没有返回值,可以相互组合,共有4种形式: 无参数,无返回值 无参数,有返回值 有参数,无返回值 有参数,有返回值 定义函数时,是否接收参数,或者是 ...

  4. Python基础学习_函数数def_返回值及返回值类型_函数块

    一. 返回值 函数作用:显示输出.处理数据并返回数据结果 函数返回值的定义:函数返回值被称为返回值 写法: 函数体内 return 返回值 (将值返回到调用函数的代码行) 返回值类型: "& ...

  5. Python教程:函数多个返回值与丢弃返回值

    1.函数多个返回值 python的函数支持返回多个值.返回多个值时,默认以tuple的方式返回. 例如,下面两个函数的定义是完全等价的. def f():return 1,2def f():retur ...

  6. python函数参数定义顺序_Python函数定义-位置参数-返回值

    原标题:Python函数定义-位置参数-返回值 1 函数介绍 函数在编程语言中就是完成特定功能的一个词句组(代码块),这组语句可以作为一个单位使用,并且给它取一个名字.可以通过函数名在程序的不同地方多 ...

  7. python怎么让输出结果为01_python函数基础-参数-返回值-注释-01

    什么是函数 函数就是有特定功能的工具 #python中有内置函数(python解释器预先封装好的)与自定义函数(用户自定义封装的)之分 为什么要用函数 #可以减少代码冗余,增加代码复用性#使代码逻辑更 ...

  8. python write函数参数_Python函数-函数参数、返回值

    函数 1.函数是什么? 函数一词来源于数学,但编程中的「函数」概念,与数学中的函数是有很大不同的,编程中的函数在英文中也有很多不同的叫法.在BASIC中叫         做subroutine(子过 ...

  9. Python技术手册 · 函数的多返回值&文件操作

    目录 ​函数的多返回值&文件操作 ​函数的多返回值 ​多返回值返回方式 ​函数的传参方式(以不同的使用方式分类) 位置参数 关键字参数 缺省参数 不定长参数 ​匿名函数(lambda) ​函数 ...

  10. python函数返回值和参数_python_函数参数和返回值

    01.函数参数和返回值的作用 函数:封装功能独立的代码,在需要时通过函数名调用,可以直接访问全局变量 参数:外界希望在函数内部处理数据 返回值:向外界报告函数的执行结果 定义函数时, 是否接受参数,或 ...

最新文章

  1. spring boot 通过Maven + tomcat 自动化部署
  2. 你真的了解AI吗?AI将怎么改变我们的生活?
  3. LeetCode Flatten Nested List Iterator(栈)
  4. PowerDesigner中的对象与关系映射建模
  5. 《SAS编程与数据挖掘商业案例》学习笔记之六
  6. 精选的一些《编程之美》相关资料
  7. 解决Atom插件安装下载问题
  8. 设计模式 - 单例模式(Singleton Pattern)
  9. BeautifulSoup库findAll()、find()方法详解
  10. NetAug(网络增强)—Dropout的反面
  11. 【Oracle】ORA-27369: job of type EXECUTABLE failed with exit code: Key has expired
  12. 数据结构笔记(二十四)-- 哈夫曼编译码
  13. 笔记本计算机在桌面显示,笔记本电脑开机后不显示桌面该怎么处理
  14. hexo博客next主题6.0版本个性化设置
  15. 常用Linux版本虚拟机的使用比较
  16. 电脑双屏变单屏后,界面显示问题
  17. ReactHooks——使用lodash中的throttle
  18. alpha测试和Beta测试有何区别
  19. 刘润:思考维度越多,理解商业越深
  20. CentOS7/8安装jq教程

热门文章

  1. U盘的另类用途(刷bios,dos杀毒,u盘密匙)
  2. app反爬测试之apk逆向分析-frida
  3. 美颜相机照片恢复,相机内存卡照片恢复
  4. 三维重建 - 摄像机标定和立体匹配中极线约束方法
  5. MATLAB运动目标检测系统
  6. 从“千里眼”到“火眼金睛”,你要看得懂的小助手还是时刻盯着的望远镜?...
  7. TS 36.211 V12.0.0-上行(3)-PUCCH
  8. 用PS给外景人像添加逆光效果
  9. 毛毛最新推荐伤感日志:我是一个任性的孩子
  10. 数据分析软件工具有哪些?