Python天天学_03_基础三
Python_day_03
金角大王: http://www.cnblogs.com/alex3714/articles/5740985.html
------Python是一个优雅的大姐姐
学习方式:通过老师的视频以及博客上面文档,以完成作业和知识点归纳的方式编写自己博客。
本节内容
- 函数基本语法及特性
- 参数与局部变量
- 高阶函数
- 函数的返回值
- 作用域
- (嵌套函数)递归
- 匿名函数
- 内置函数
一、函数基本语法及特性
为什么使用函数
- 代码重复过多,一个劲的copy and paste不符合高端程序员的气质
- 如果日后需要修改发邮件的这段代码,比如加入群发功能,那你就需要在所有用到这段代码的地方都修改一遍
- 减少重复代码
- 使程序变的可扩展
- 使程序变得易维护
定义: 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可
特性:
- 减少重复代码
- 使程序变的可扩展
- 使程序变得易维护
基本语法:(使用def关键字定义)
函数名的命名规则:
- 函数名必须以下划线或字母开头,可以包含任意字母、数字或下划线的组合。不能使用任何的标点符号;
- 函数名是区分大小写的。
- 函数名不能是保留字。
二、参数与局部变量
形参和实参
形参:形式参数,不是实际存在,是虚拟变量。在定义函数和函数体的时候使用形参,目的是在函数调用时接收实参(实参个数,类型应与实参一一对应)
实参:实际参数,调用函数时传给函数的参数,可以是常量,变量,表达式,函数,传给形参
区别:形参是虚拟的,不占用内存空间,.形参变量只有在被调用时才分配内存单元,实参是一个变量,占用内存空间,数据传送单向,实参传给形参,不能形参传给实参
必备参数
必需参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样。
关键字参数
关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值。使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值
默认参数(缺省参数)
调用函数时,缺省参数的值如果没有传入,则被认为是默认值。如果sex没有被传入,会打印默认的sex。
不定长参数
加了星号(*)的变量名会存放所有未命名的变量参数。而加(**)的变量名会存放命名的变量参数
全局与局部变量
在子程序中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量。
全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序。
当全局变量与局部变量同名时:在定义局部变量的子程序内,局部变量起作用;在其它地方全局变量起作用。
三、高级函数
高阶函数是至少满足下列一个条件的函数:
- 接受一个或多个函数作为输入
- 输出一个函数
这里不做深入的探究!
四、函数的返回值
要想获取函数的执行结果,就可以用return语句把结果返回
注意:
- 函数在执行过程中只要遇到return语句,就会停止执行并返回结果,so 也可以理解为 return 语句代表着函数的结束
- 如果未在函数中指定return,那这个函数的返回值为None
- 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_基础三相关推荐
- python天天学怎么样-Python天天学_03_基础三
Python_day_03 ------Python是一个优雅的大姐姐 学习方式:通过老师的视频以及博客上面文档,以完成作业和知识点归纳的方式编写自己博客. 本节内容 函数基本语法及特性 参数与局部变 ...
- python天天学怎么样-Python天天学_01_基础1
Python_day_01 ------Python是一个优雅的大姐姐 学习方式:通过老师的视频以及博客上面文档,以完成作业和知识点归纳的方式编写自己博客. 一.Hello World程序 代码很简单 ...
- python自学步骤-小白刚入门Python,学完基础后,接下来的学习步骤!
自学Python要学多久可以学会? 如果是自学,从零基础开端学习python的话,按照每个人理解能力的不同,大致上需求半年到一年半左右的时刻,当然,如果有其它编程言语的经历,入门还是比较快的,大概需求 ...
- 学python先学什么基础_python学完基础学什么
相信一个python的初学者一定已经学完了基础的编程知识,和其他编程语言差不多,基础的数据类型.判断.循环.函数,或许你还学了面向对象.然而,当你学完这些后,或许一本python的入门书籍你已经学完了 ...
- python天天学怎么样-python练习:好好学习,天天向上
这样看来,自己的学习是三天打鱼两天晒网,效率不知道是千分之零点零零几了. 天天向上的力量 问题一:1‰的力量 一年365天,每天进步1‰,累计进步多少呢? 1.001的365次方 一年365天,每天退 ...
- 学完python基础后应该学什么专业_小白刚入门Python,学完基础后,接下来的学习步骤!...
需要多长时间来学习Python自学?如果是自学,学习python从零基础,这将需要大约半年到一年半的时间,这取决于每个人的理解.当然,如果你有其他编程语言的经验,开始比较快.大约需要2 ~ 3个月用P ...
- python需要学哪些基础知识_零基础学Python应该学习哪些入门知识
最近python很火,请问小白应该怎么入门呢. 大致总结了这些方面,咱们直奔主题吧. 1.Python入门导学 Python的特性.优点.缺点.前景以及python能做些什么? 2.Python环境安 ...
- python天天学怎么样-每天一遍,好好学习,天天向上(Python)
There are no perfect relationships.It's how you accept the imperfections that makes it perfect.没有完美的 ...
- 微信python天天学_刚学Python一礼拜!我就能模拟登录微信公众号!我是天才吧!...
最近迷上了用python写爬虫,一发不可收拾,下面我们来说一下如何实现模拟登录微信公众号平台. 故事起因,由于本人注册了一个公众号,想着如何通过脚本实现像部分用户发送消息呢? 如何实现一键上传材料呢? ...
- 微信python天天学_教你使用python实现微信每天给女朋友说晚安
本文为大家分享了教你用微信每天给女朋友说晚安的python实战,供大家参考,具体内容如下 但凡一件事,稍微有些重复.我就考虑怎么样用程序来实现它. 这里给各位程序员朋友分享如何每天给朋友定时微信发送& ...
最新文章
- linux内核杂记(10)-进程调度(5)
- CodeForces - 622C Not Equal on a Segment(思维+水题)
- 职业生涯中的愚蠢想法
- numpy基础(part15)--线性模型
- 知识图谱最新权威综述论文解读:实体发现
- android app没有读写权限设置,Android 6.0以上权限拒绝打开权限设置界面的解决方法...
- 利用递归遍历文件夹和文件存入TreeView
- 《谈谈认同》这个文章有点晦涩 写的不太好
- 如何开启MySQL的慢查询日志
- linux下好用的超级终端,【整理】Windows下超级终端的最佳替代品,免费的串口终端工具Putty...
- 服务器性能测试 iometer 测试io
- App的开发成本是多少?
- DAS、SAN和NAS三种存储方式
- 软件工程之结构化方法
- reportunit 命令_DevExpress之XtraReport 学习
- 寒假集训难题(四)QWQ和神奇的传送器nefu1608
- c++敢死队问题代码(为大一而生)
- 实战 Vue 之配置多页面应用
- 九章云极发布YLearn因果学习开源项目;字节跳动大量招聘芯片工程师;苹果被俄法院罚款约21.6万元 | 每日大事件...
- thinkphp6 框架源码分析
热门文章
- PDF to Word Document Converter for Mac(PDF格式转换必备)
- 如何在macOS Big Sur 11.0 系统中在右键菜单中添加发送共享到微信或QQ的功能?
- [Istioc]Istio部署sock-shop时rabbitmq出现CrashLoopBackOff
- Laravel 全文检索 Scout集成Algolia
- 20151026作业
- Linux查找命令与find命令详解
- 导入资料的预览与修改
- [跪了]Servlet 工作原理解析
- 重磅!!Gradle 6.6 发布,大幅提升性能!
- 1.3万亿条数据查询毫秒级响应,如何做到的?