Python_day_03

金角大王: http://www.cnblogs.com/alex3714/articles/5740985.html

------Python是一个优雅的大姐姐

学习方式:通过老师的视频以及博客上面文档,以完成作业和知识点归纳的方式编写自己博客。

本节内容

  1. 函数基本语法及特性
  2. 参数与局部变量
  3. 高阶函数
  4. 函数的返回值
  5. 作用域
  6. (嵌套函数)递归
  7. 匿名函数
  8. 内置函数

一、函数基本语法及特性

为什么使用函数

  1. 代码重复过多,一个劲的copy and paste不符合高端程序员的气质
  2. 如果日后需要修改发邮件的这段代码,比如加入群发功能,那你就需要在所有用到这段代码的地方都修改一遍
  3. 减少重复代码
  4. 使程序变的可扩展
  5. 使程序变得易维护

定义: 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可

特性:

  1. 减少重复代码
  2. 使程序变的可扩展
  3. 使程序变得易维护

基本语法:(使用def关键字定义)

函数名的命名规则

  • 函数名必须以下划线或字母开头,可以包含任意字母、数字或下划线的组合。不能使用任何的标点符号;
  • 函数名是区分大小写的。
  • 函数名不能是保留字。

二、参数与局部变量

形参和实参

形参:形式参数,不是实际存在,是虚拟变量。在定义函数和函数体的时候使用形参,目的是在函数调用时接收实参(实参个数,类型应与实参一一对应)

实参:实际参数,调用函数时传给函数的参数,可以是常量,变量,表达式,函数,传给形参

区别:形参是虚拟的,不占用内存空间,.形参变量只有在被调用时才分配内存单元,实参是一个变量,占用内存空间,数据传送单向,实参传给形参,不能形参传给实参

必备参数

必需参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样。

关键字参数

关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值。使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值

默认参数(缺省参数)

调用函数时,缺省参数的值如果没有传入,则被认为是默认值。如果sex没有被传入,会打印默认的sex。

不定长参数

加了星号(*)的变量名会存放所有未命名的变量参数。而加(**)的变量名会存放命名的变量参数

全局与局部变量

在子程序中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量。

全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序。

当全局变量与局部变量同名时:在定义局部变量的子程序内,局部变量起作用;在其它地方全局变量起作用。

三、高级函数

高阶函数是至少满足下列一个条件的函数:

  • 接受一个或多个函数作为输入
  • 输出一个函数

这里不做深入的探究!

 

四、函数的返回值

要想获取函数的执行结果,就可以用return语句把结果返回

注意:

  1. 函数在执行过程中只要遇到return语句,就会停止执行并返回结果,so 也可以理解为 return 语句代表着函数的结束
  2. 如果未在函数中指定return,那这个函数的返回值为None
  3. return多个对象,解释器会把这多个对象组装成一个元组作为一个一个整体结果输出。

五、作用域

作用域介绍:

python中的作用域分4种情况:

  • L:local,局部作用域,即函数中定义的变量;
  • E:enclosing,嵌套的父级函数的局部作用域,即包含此函数的上级函数的局部作用域,但不是全局的;
  • G:globa,全局变量,就是模块级别定义的变量;
  • B:built-in,系统固定模块里面的变量,比如int, bytearray等。 搜索变量的优先级顺序依次是:作用域局部>外层作用域>当前模块中的全局>python内置作用域,也就是LEGB。

作用域产生

在Python中,只有模块(module),类(class)以及函数(def、lambda)才会引入新的作用域,其它的代码块(如if、try、for等)是不会引入新的作用域的

修改变量(global,nonlocal关键字)

当内部作用域想修改外部作用域的变量时,就要用到global和nonlocal关键字了,当修改的变量是在全局作用域(global作用域)上的,就要使用global先声明

global关键字声明的变量必须在全局作用域上,不能嵌套作用域上,当要修改嵌套作用域(enclosing作用域,外层非全局作用域)中的变量怎么办呢,这时就需要nonlocal关键字了

总结:

(1)变量查找顺序:LEGB,作用域局部>外层作用域>当前模块中的全局>python内置作用域;

(2)只有模块、类、及函数才能引入新作用域;

(3)对于一个变量,内部作用域先声明就会覆盖外部变量,不声明直接使用,就会使用外部作用域的变量;

(4)内部作用域要修改外部作用域变量的值时,全局变量要使用global关键字,嵌套作用域变量要使用nonlocal关键字。nonlocal是python3新增的关键字,有了这个 关键字,就能完美的实现闭包了。

六、(嵌套函数)递归

递归函数的优点:是定义简单,逻辑清晰。理论上,所有的递归函数都可以写成循环的方式,但循环的逻辑不如递归清晰。

递归特性:

1. 必须有一个明确的结束条件

2. 每次进入更深一层递归时,问题规模相比上次递归都应有所减少

3. 递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出。)

举例:求一个数的阶乘

七、匿名函数

匿名函数的命名规则,用lamdba 关键字标识,冒号(:)左侧表示函数接收的参数(a,b) ,冒号(:)右侧表示函数的返回值(a+b)。

因为lamdba在创建时不需要命名,所以,叫匿名函数

八、内置函数

Py3内置函数:https://docs.python.org/3.5/library/functions.html

需要强调的三个内置函数:

filter()

map()

reduce()

转载于:https://www.cnblogs.com/xzmxddx/p/8371317.html

Python天天学_03_基础三相关推荐

  1. python天天学怎么样-Python天天学_03_基础三

    Python_day_03 ------Python是一个优雅的大姐姐 学习方式:通过老师的视频以及博客上面文档,以完成作业和知识点归纳的方式编写自己博客. 本节内容 函数基本语法及特性 参数与局部变 ...

  2. python天天学怎么样-Python天天学_01_基础1

    Python_day_01 ------Python是一个优雅的大姐姐 学习方式:通过老师的视频以及博客上面文档,以完成作业和知识点归纳的方式编写自己博客. 一.Hello World程序 代码很简单 ...

  3. python自学步骤-小白刚入门Python,学完基础后,接下来的学习步骤!

    自学Python要学多久可以学会? 如果是自学,从零基础开端学习python的话,按照每个人理解能力的不同,大致上需求半年到一年半左右的时刻,当然,如果有其它编程言语的经历,入门还是比较快的,大概需求 ...

  4. 学python先学什么基础_python学完基础学什么

    相信一个python的初学者一定已经学完了基础的编程知识,和其他编程语言差不多,基础的数据类型.判断.循环.函数,或许你还学了面向对象.然而,当你学完这些后,或许一本python的入门书籍你已经学完了 ...

  5. python天天学怎么样-python练习:好好学习,天天向上

    这样看来,自己的学习是三天打鱼两天晒网,效率不知道是千分之零点零零几了. 天天向上的力量 问题一:1‰的力量 一年365天,每天进步1‰,累计进步多少呢? 1.001的365次方 一年365天,每天退 ...

  6. 学完python基础后应该学什么专业_小白刚入门Python,学完基础后,接下来的学习步骤!...

    需要多长时间来学习Python自学?如果是自学,学习python从零基础,这将需要大约半年到一年半的时间,这取决于每个人的理解.当然,如果你有其他编程语言的经验,开始比较快.大约需要2 ~ 3个月用P ...

  7. python需要学哪些基础知识_零基础学Python应该学习哪些入门知识

    最近python很火,请问小白应该怎么入门呢. 大致总结了这些方面,咱们直奔主题吧. 1.Python入门导学 Python的特性.优点.缺点.前景以及python能做些什么? 2.Python环境安 ...

  8. python天天学怎么样-每天一遍,好好学习,天天向上(Python)

    There are no perfect relationships.It's how you accept the imperfections that makes it perfect.没有完美的 ...

  9. 微信python天天学_刚学Python一礼拜!我就能模拟登录微信公众号!我是天才吧!...

    最近迷上了用python写爬虫,一发不可收拾,下面我们来说一下如何实现模拟登录微信公众号平台. 故事起因,由于本人注册了一个公众号,想着如何通过脚本实现像部分用户发送消息呢? 如何实现一键上传材料呢? ...

  10. 微信python天天学_教你使用python实现微信每天给女朋友说晚安

    本文为大家分享了教你用微信每天给女朋友说晚安的python实战,供大家参考,具体内容如下 但凡一件事,稍微有些重复.我就考虑怎么样用程序来实现它. 这里给各位程序员朋友分享如何每天给朋友定时微信发送& ...

最新文章

  1. linux内核杂记(10)-进程调度(5)
  2. CodeForces - 622C Not Equal on a Segment(思维+水题)
  3. 职业生涯中的愚蠢想法
  4. numpy基础(part15)--线性模型
  5. 知识图谱最新权威综述论文解读:实体发现
  6. android app没有读写权限设置,Android 6.0以上权限拒绝打开权限设置界面的解决方法...
  7. 利用递归遍历文件夹和文件存入TreeView
  8. 《谈谈认同》这个文章有点晦涩 写的不太好
  9. 如何开启MySQL的慢查询日志
  10. linux下好用的超级终端,【整理】Windows下超级终端的最佳替代品,免费的串口终端工具Putty...
  11. 服务器性能测试 iometer 测试io
  12. App的开发成本是多少?
  13. DAS、SAN和NAS三种存储方式
  14. 软件工程之结构化方法
  15. reportunit 命令_DevExpress之XtraReport 学习
  16. 寒假集训难题(四)QWQ和神奇的传送器nefu1608
  17. c++敢死队问题代码(为大一而生)
  18. 实战 Vue 之配置多页面应用
  19. 九章云极发布YLearn因果学习开源项目;字节跳动大量招聘芯片工程师;苹果被俄法院罚款约21.6万元 | 每日大事件...
  20. thinkphp6 框架源码分析

热门文章

  1. PDF to Word Document Converter for Mac(PDF格式转换必备)
  2. 如何在macOS Big Sur 11.0 系统中在右键菜单中添加发送共享到微信或QQ的功能?
  3. [Istioc]Istio部署sock-shop时rabbitmq出现CrashLoopBackOff
  4. Laravel 全文检索 Scout集成Algolia
  5. 20151026作业
  6. Linux查找命令与find命令详解
  7. 导入资料的预览与修改
  8. [跪了]Servlet 工作原理解析
  9. 重磅!!Gradle 6.6 发布,大幅提升性能!
  10. 1.3万亿条数据查询毫秒级响应,如何做到的?