函数与过程

  • 函数(function)是有返回值的,即是干完事必须写报告的苦逼
  • 过程(procedure)是简单的、特殊并且没有返回值的,即是完事后拍屁股一走了之的小混蛋
  • attention:Python严格来说只有函数没有过程

谈谈返回值

  • 在许多编程语言中,我们说一个函数是整型函数是指这个函数会返回一个整型的返回值,而Python是动态的确定类型,只有在赋值时,编译器自动确定需要什么类型
  • Python没有变量只有名字,即在Python中拿来即用就ok,并不用关注其是什么类型,包括其返回值,Python可以返回多个值

函数变量的作用域

变量的作用域即变量的可见性,即程序运行时变量可被访问的范围

局部变量(local variable)

  • 如下代码中,price、rate、final_price,我们称之为discounts()函数里的局部变量
def discounts(price,rate):final_price = price * ratereturn final_priceold_price = float(input('请输入原价:'))
rate = float(input('请输入折扣率:'))
new_price = discounts(old_price,rate)
print('打折后的价格是:',new_price)

  • 修改代码后,在函数外边打印局部变量final_price会报错,“final_price从来没有被定义过”,因为final_price只是一个局部变量,它的作用范围只在discounts这个函数里边生效,出了discounts函数范围,即在外边看不到final_price了
def discounts(price,rate):final_price = price * ratereturn final_priceold_price = float(input('请输入原价:'))
rate = float(input('请输入折扣率:'))
new_price = discounts(old_price,rate)
print('打折后的价格是:',new_price)
print('这里试图打印局部变量final_price的值:',final_price)#在函数外边打印局部变量final_price会报错

  • 在函数里边定义的参数如上述的price、rate以及变量final_price,它们都称之为局部变量,出了定义的函数这些变量都是无效的
  • 原理是Python在运行函数时,在调用这个函数时,它是利用栈stack进行存储,把函数所需要的代码以及变量都放在stack里边,当执行完该函数时,那么这个函数会被自动的删除,即stack的数据会自动清空,在函数外是无法访问到局部变量的。

全局变量(global variable)

  • 在上述代码中,old_price、rate、new_price是定义在函数外的全局变量,全局变量拥有更大的作用域,它们的作用域是整个代码段
  • 再次修改代码后,可以运行不会报错
def discounts(price,rate):final_price = price * rateprint('这里试图打印全局变量old_price的值:',old_price)#看看全局变量可否再函数内return final_priceold_price = float(input('请输入原价:'))
rate = float(input('请输入折扣率:'))
new_price = discounts(old_price,rate)
print('打折后的价格是:',new_price)

  • 在Python里,可以在函数中肆无忌惮地访问一个全局变量,但是如果试图去修改一个全局变量,就有奇怪的事情发生
  • 如果在函数内试图去修改全局变量的话,Python会自动创建一个新的局部变量代替,名字与全局变量一样,两者同时存在互不影响,因为两者的存储空间不一
def discounts(price,rate):final_price = price * rate# print('这里试图打印全局变量old_price的值:',old_price)old_price = 50print('修改后的old_price的值1是:',old_price)#新建的局部变量return final_priceold_price = float(input('请输入原价:'))
rate = float(input('请输入折扣率:'))
new_price = discounts(old_price,rate)
print('修改后的old_price的值2是:',old_price)#原来的全局变量
print('打折后的价格是:',new_price)

  • 全局变量在整个代码中都可以访问到,但不要试图在函数内部去修改它,可以在函数内部去访问它的值的不要去修改它,因为这样的话Python会自动在函数内部新建一个名字一样的局部变量代替

Task

0. 下边程序会输入什么?

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


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

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

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

2. 请问 Python 的 return 语句可以返回多个不同类型的值吗?
可以的,以元组或列表形式返回
3. 目测以下程序会打印什么内容:

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


4. 目测以下程序会打印什么内容?

var = ' Hi 'def fun1():global varvar = ' Baby 'return fun2(var)def fun2(var):var += 'I love you'fun3(var)return vardef fun3(var):var = ' 小甲鱼 'print(fun1())

Baby I love you

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


my first code

def judge(string):a = len(string)counts = 0for i in range(a):if string[i] == string[a - 1 -i]:counts += 1if counts == a:print('是回文联!')else:print('不是回文联!')
string1 = input('请输入一句话:')
judge(string1)


my improved code:巧用地板除法,避免判断重复,比如判断了第一位和最后一位的关系就不再判断最后一位与第一位的关系

def judge(string):a = len(string)counts = 0for i in range(a // 2):# 巧用地板除法,避免判断重复,比如判断了第一位和最后一位的关系就不再判断最后一位与第一位的关系if string[i] == string[a - 1 -i]:counts += 1if counts == a // 2:print('是回文联!')else:print('不是回文联!')
string1 = input('请输入一句话:')
judge(string1)


小甲鱼1号代码:使用判断标准flag,学习学习!!!"

def palindrome(string):length = len(string)last = length-1 #最后一个字符串的索引值length //= 2flag = 1 # 此处flag用于判断,只要有一个不相等,flag就为0for each in range(length):if string[each] != string[last]:flag = 0last -= 1 # 从最后一个索引值开始往回倒if flag == 1:return 1else:return 0string = input('请输入一句话:')
if palindrome(string) == 1:print('是回文联!')
else:print('不是回文联!')

小甲鱼2号代码:巧用reversed,学习学习!!!"

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

6. 编写一个函数,分别统计出传入字符串参数(可能不只一个参数)的英文字母、空格、数字和其它字符的个数。
程序执行结果如图:


小甲鱼代码:
【1】多个参数是元组形式
【2】字符串的方法
【3】格式化字符串

def count(*params):#多个参数是以元组的形式a = len(params)#参数的个数for i in range(a):letters = 0 #英文字母初始值为0space = 0 #空格初始值为0digit = 0 #数字初始值为0others = 0for each in params[i]:#一个参数一个参数地判断if each.isalpha():letters += 1elif each.isspace():space += 1elif each.isdigit():digit += 1else:others += 1print('第 %d 个字符串共有:英文字母 %d 个,数字 %d 个,空格 %d 个,其他字符 %d 个。' % (i+1, letters, digit, space, others))

零基础入门学习Python(18)-全局变量与局部变量相关推荐

  1. 零基础学python 视频_零基础入门学习PYTHON(第2版)(微课视频版)

    小甲鱼畅销图书重磅升级,针对Python 3.7,通过生动的实例,让读者在实践中理解概念,在轻松.愉快中学会Python! 本书提倡理解为主,应用为王.因此,只要有可能,小甲鱼(注:作者)都会通过生动 ...

  2. 《零基础入门学习Python》学习笔记(1-25)

    参考:<零基础入门学习python>http://edu.csdn.net/course/detail/906?locationNum=1&fps=1&ref=srch&a ...

  3. 零基础学python pdf-Python pdf(零基础入门学习Python)V1.0 最新版

    Python pdf(零基础入门学习Python)是一款功能强劲专业实用的Python电子书籍.想要零基础入门学习Python?那就快试试绿色先锋小编推荐的Python pdf最新版下载使用.由作者小 ...

  4. 零基础入门学习Python,我与python的第一次亲密接触后的感受!

    前言:Python是适合初学者入门最好的语言 Python适合初学者入门最好的语言 人工智能用Python?高考要加入Python?现在连微软官方Excel都要把Python作为官方语言!Python ...

  5. 零基础入门学python 第二版-《零基础入门学习Python》第二版和第一版的区别在哪里呢?...

    第一版 时光荏苒,一晃间,距离<零基础入门学习 Python>出版(2016年11月)已经过去两年多了,在这段时间里, Python 逐步走入了大家的视野,这门语言因其简洁的语法风格,在云 ...

  6. 0基础学python难吗-零基础入门学习Python技术难不难?

    原标题:零基础入门学习Python技术难不难? 近几年对python人才爆发式需求,导致很多人转行进入python开发行业,现如今Python这门语言的就业前景会非常好.相对于其他来说,它语法简单易读 ...

  7. 零基础python必背代码-零基础入门学习python 96集全

    零基础入门学习python 96集全 第000讲 愉快的开始(视频+课件)xa0 第001讲 我和Python第一次亲密接触(视频+课件)xa0 第002讲 用Python设第一个游戏(视频+课件+源 ...

  8. 圆方圆学院零基础入门学习Python(绝对干货,值得学习)

    圆方圆学院零基础入门学习Python(绝对干货,值得学习) 链接: pan.baidu.com/s/1Shpd1G8L- 提取码: bup7

  9. 零基础入门学习Python,我与python的第一次亲密接触后的感受

    前言:Python是适合初学者入门最好的语言 Python适合初学者入门最好的语言 人工智能用Python?高考要加入Python?现在连微软官方Excel都要把Python作为官方语言!Python ...

  10. 书籍推荐:零基础入门学习Python

    零基础入门学习Python pdf下载 所属网站分类: 资源下载 > python电子书 作者:goodbody 链接: http://www.pythonheidong.com/blog/ar ...

最新文章

  1. php lumen auth,学习 Lumen 用户认证 (一)
  2. Android 做项目总结
  3. 【Linux】14.ubuntu忘记root密码、用户密码输入次数过多锁住的问题
  4. 网页布局(固定与不固定原理)
  5. Windows常用的网络命令
  6. 上海大学c语言作业答案,《上海大学C语言选择题》.doc
  7. 2-4:C++快速入门之函数重载
  8. SAP License:家装ERP
  9. java 语法 —— final
  10. Mysql数据库课程设计
  11. 中国教育行业市场行情动态及投资潜力研究报告(2022-2028年)
  12. JavaScript锅打灰太狼游戏
  13. 40位40岁以下投资人
  14. 软件研发模型和软件测试模型
  15. 龙ol一键端服务器维护,龙OL一键端纯一键点两下OK问题及解答汇总贴.doc
  16. AT89C51单片机制作密码锁,真的很详细了
  17. Csharp基础整理
  18. 赋权边覆盖问题——采用禁忌搜索算法的C++实现
  19. 打车软件烧钱背后的商业逻辑
  20. oracle网页客户端工具

热门文章

  1. 工资倒挂也刺激不了已是咸鱼的你
  2. 被迫重构代码,这次我干掉了 if-else
  3. 业务方的一堆需求,被我一句话怼回去了!CTO笑而不语,晋升有望了
  4. 嫌弃俄罗斯的火箭报价太黑!马斯克自己造火箭!SpaceX首次载人发射任务成功!太牛了!...
  5. 上线前一个小时,dubbo这个问题可把我折腾惨了
  6. 98页PPT,看懂阿里、小米、京东、美团的组织架构和战略变迁!
  7. 阿里老员工论坛炫耀:每年税前260万,还有三千万期权在握
  8. 哈夫曼树实现压缩文件
  9. 静态方法多次调用内存_java虚拟机的内存分析
  10. python中的异常分类