Python之函数——基础篇
函数
函数,在BASIC中,叫subroutine(子过程或子程序),在Pascal中叫做procedure(过程)和function,在C中只有function,在Java中叫method。
定义:函数是指将一组语句的集合通过一个名字(函数名)封装起来,要执行这个函数,只需调用其函数名即可。
定义一个不带参数的函数:
def sayhi():
print('hello')
sayhi()
定义一个带参数的函数:
def sayhi(name):
print('hello', name)
sayhi('Jack')
函数参数
形参:在函数定义时接收
默认参数:函数定义时即默认给参数赋值,调用时可以不需要额外赋值,位置应在位置参数之后。(有关默认参数陷阱,请见:函数的默认参数陷阱)
关键参数:指定参数名,即成为关键参数,但是关键参数必须放在位置参数之后。
非固定参数(动态参数):
(1)动态位置参数:参数前加*号,传递的参数就可以不再是固定的个数,传过来的所有参数打包成元组。(形参可以是*args,也可以是*[列表]的形式)
(2)动态关键字参数:形式参数前加**号,传递的可以是未定义的关键字参数,以字典的key-value保存。
形参排列顺序:位置参数、动态位置参数(*args)、默认参数、动态默认参数(**kwargs)

--如果想将一整个字典传入kwargs,则应在实参前也加上**号。
实参:在函数调用时传值
按照位置传值:现有一个列表(元组)args,使用*args传入可以将args拆分后传入函数,直接使用args传则会在函数中得到(args,)
按照关键字传值:现有一个字典kwargs,使用**kwargs传入可以将kwargs拆分后传入函数(且此处的键必须为字符串类型),直接使用kwargs传会报错。
函数参数总结:

函数返回值
函数的外部代码想要获取函数的执行结果,就可以用函数的return语句把结果返回。
注: 1.函数执行过程中,遇return即停止执行并返回结果,可以理解为return语句代表函数的结束。
2.如果未在函数中指定return,则返回值为None。
3.函数永远只能返回一个值,当有多个值时会打包成元组返回。
局部变量与全局变量
全局变量:定义在函数外部一级代码的变量,在全局都能用
局部变量:定义在函数里的变量,只能在局部生效
在函数内部,可以引用全局变量,但不能修改(global后则可以修改)。如果全局和局部都有一个同名,函数查找顺序是由内而外的。
作用域
在Python中,一个函数就是一个作用域(和JavaScript类似); C#、Java中作用域为{ }
局部变量放置在其作用域中,代码定义完成后,作用域已经生成,作用域链向上查找。验证如下:
age = 18 # 全局作用域
def show_age():
new_age = 19 # 外层函数局部作用域
def inner():
print(age)
print(new_age)
show_age()
打印结果:

内层函数用到了外层函数以及全局的作用域的变量,但变量在此只能引用不能改变,否则会报错。
命名空间
命名空间也称名称空间,是存放变量名字的地方。举例说明,x=1,1存放在内存中,x变量名存在哪里呢?x本身也存在内存中。
名称空间正是存放名字x与1绑定关系的地方,它不仅存x名,也存了绑定关系。
名称空间共3种:
1.locals:函数内的名称空间,包括局部变量和形参。
2.globals:全局变量,程序所有的变量及绑定关系。
3.builtins:内置模块的名称空间
Python之函数——基础篇的更多相关文章
- Python学习笔记基础篇——总览
Python初识与简介[开篇] Python学习笔记——基础篇[第一周]——变量与赋值.用户交互.条件判断.循环控制.数据类型.文本操作 Python学习笔记——基础篇[第二周]——解释器.字符串.列 ...
- 深度学习入门者的Python快速教程 - 基础篇
5.1 Python简介 本章将介绍Python的最基本语法,以及一些和深度学习还有计算机视觉最相关的基本使用. 5.1.1 Python简史 Python是一门解释型的高级编程语言,特点是简单明 ...
- [资料分享]Python视频教程(基础篇、进阶篇、项目篇)
Python是一种开放源代码的脚本编程语言,这种脚本语言特别强调开发速度和代码的清晰程度.它可以用来开发各种程序,从简单的脚本任务到复杂的.面向对象的应用程序都有大显身手的地方.Python还被当作一 ...
- Python成长笔记 - 基础篇 (四)函数
1.面向对象:类(class) 2.面向过程:过程(def) 3.函数式编程:函数(def)----python 1.函数:http://egon09.blog.51cto.com/9161406 ...
- python之路基础篇
基础篇 1.Python基础之初识python 2.Python数据类型之字符串 3.Python数据类型之列表 4.Python数据类型之元祖 5.Python数据类型之字典 6.Python Se ...
- Python学习笔记——基础篇【第一周】——变量与赋值、用户交互、条件判断、循环控制、数据类型、文本操作
目录 Python第一周笔记 1.学习Python目的 2.Python简史介绍 3.Python3特性 4.Hello World程序 5.变量与赋值 6.用户交互 7.条件判断与缩进 8.循环控制 ...
- python 17 函数基础(一)
http://www.cnblogs.com/BeginMan/p/3171977.html 一.什么是函数.方法.过程 推荐阅读:http://www.cnblogs.com/snandy/arch ...
- Python成长笔记 - 基础篇 (二)python基本语法
Python的设计目标之一是让代码具备高度的可阅读性.它设计时尽量使用其它语言经常使用的标点符号和英文单字,让代码看起来整洁美观.它不像其他的静态语言如C.Pascal那样需要重复书写声明语句,也不像 ...
- Python学习笔记——基础篇【第七周】———类的静态方法 类方法及属性
新式类和经典类的区别 python2.7 新式类——广度优先 经典类——深度优先 python3.0 新式类——广度优先 经典类——广度优先 广度优先才是正常的思维,所以python 3.0中已经修复 ...
随机推荐
- linux下如何删除十字符libudev.so病毒文件
服务器不停的向外发包,且CPU持续100%,远程登录后查看发现有一长度为10的随机字符串进程,kill掉,会重新生成另外长度为10的字符串进程.删除文件也会重复生成,非常痛苦.查阅crond相关日志, ...
- .NET 编写一个可以异步等待循环中任何一个部分的 Awaiter
林德熙 小伙伴希望保存一个文件,并且希望如果出错了也要不断地重试.然而我认为如果一直错误则应该对外抛出异常让调用者知道为什么会一直错误. 这似乎是一个矛盾的要求.然而最终我想到了一个办法:让重试一直进 ...
- 带CookieContainer进行post
1.获取CookieContainer ——用户登录 CookieContainer cookie = new CookieContainer(); UserLoginPost("post地 ...
- 关于Hibernate性能优化之 FetchType=Lazy时查询数据
当表A和表B一对多的关系 对于A和B的实体类,设置FetchType=EAGER时,取A表数据,对应B表的数据都会跟着一起加载,优点不用进行二次查询.缺点是严重影响数据查询的访问时间. 解决办法Fet ...
- jquery中的 .parent()
☆ 遍历 - .parent() 方法: 查找每个段落的带有 "selected" 类的父元素: <body> <ul class="level-1&q ...
- 【maven】Maven根据Profile读取不同配置环境配置文件
开发需求:在日常开发中,我们大多都会有开发环境(dev).测试环境(test).生产环境(product),不同环境的参数肯定不一样,我们需要在打包的时候,不同环境打不同当包,如果手动改,一方面效率低 ...
- map和jsonObject 这2中数据结构之间转换
前台写json直接是:var array = [ ] ; 调用方法:array[index],若是对象,再[“key”] var obj = {''a'':123 , "b":&q ...
- 初学者必读原生AJAX-异步的javaScript和XML
1.前台页面 <form action="#" method="post"> 姓名<input type="text" n ...
- nuclio kubernetes 部署
一张参考架构图: 从图中可以看到nuclio可以运行到docker 以及kubernetes中 提供了kubernetes 部署的脚本 安装 创建命名空间 kubectl create namespa ...
- c2java Greedy 之任务调度
近期调试一个javaproject的时候,我遇到不是期望的输出结果时.是这么干的: A1凝视掉抛出的异常: A2加打印对照异常输入和正常输入. A3进一步加打印缩小范围. 事实上仅仅需:B1静下心来细 ...