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中已经修复 ...
随机推荐
- MyEclipse junit测试问题initializationError
问题的情况如上. 问题的解决方法居然是:选中函数的整行,而不是只选中函数名,如下图选中运行junit测试. TestMySQL.testDriverMannager1Unrooted Testsini ...
- ReSharper2017.3的列对齐、排版格式、列对齐错误的修复
ReSharper代码排版格式 列对齐 本文提供全流程,中文翻译.Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- ...
- Http常见状态码说明
一些常见的状态码为: 200 - 服务器成功返回网页404 - 请求的网页不存在503 - 服务不可用 详细分解: 1xx(临时响应) 表示临时响应并需要请求者继续执行操作的状态代码.代码 说明100 ...
- CF1096:D. Easy Problem(DP)
Vasya is preparing a contest, and now he has written a statement for an easy problem. The statement ...
- BZOJ3473: 字符串【后缀数组+思维】
Description 给定n个字符串,询问每个字符串有多少子串(不包括空串)是所有n个字符串中至少k个字符串的子串? Input 第一行两个整数n,k. 接下来n行每行一个字符串. Output 一 ...
- 三值 bool? 进行与或运算后的结果
bool? 实际上是 Nullable<Boolean> 类型,可以当作三值的 bool 类型来使用.不过三值的布尔进行与或运算时的结果与二值有什么不同吗? 本文内容 重载条件逻辑运算符“ ...
- 古典、SOA、传统、K8S、ServiceMesh
古典.SOA.传统.K8S.ServiceMesh 十几年前就有一些公司开始践行服务拆分以及SOA,六年前有了微服务的概念,于是大家开始思考SOA和微服务的关系和区别.最近三年Spring Cloud ...
- Mybatis的mapper文件中$和#的用法及区别详解
https://www.2cto.com/database/201806/752139.html用了一段时间的Mybatis了,对于$和#的用法老是很迷糊,特此记下加深记忆. 简单来说 #{} 会在将 ...
- x86函数调用约定
以下摘自<IDA Pro>,貌似有一些细节之处没有交代清楚呢,需要进一步思考.实践. 了解栈帧的基本概念后,接下来详细介绍它们的结构.下面的例子涉及x86体系结构和与常见的x86编译器(如 ...
- SQL 存储过程入门(五)
好久没来博客园留下点东西,忙到找工作,最近把工作落实了. 最近公司的业务都是存储过程开发,发现去维护起来相当困难. 由于是维护项目,产品很久前都发布了,然而有一些修改,让我们去修改现在的逻辑,去看懂人 ...