python【第三篇】函数
内容大纲:
1.函数基本语法与特性
2.参数与局部变量
3.返回值
4.递归
5.匿名函数lambda
6.函数式编程介绍
7.高阶函数
8.内置函数
1.函数基本语法与特性
函数的定义:函数是指将一组语句的集合通过一个名字(函数名)封装起来,想要执行这个函数,只需要调用其函数名即可。
BASIC中叫做subroutine(子过程或子程序),在Pascal中叫做procedure(过程)和function,在C中只有function,在Java里面叫做method。
特性:1.减少重复代码 2.是程序变得可以扩展 3.使程序变得易维护
语法定义:
def func(): # 定义一个函数 func为函数名 print("Hello World!") func() # Hello World! # 调用函数
函数还可以带参数:
#! /usr/bin/env python3 a, b = 4, 5 sum_ = a + b print(sum_) # 上面的代码等价于下面这段代码 def sum_x_y(x, y): s = x + y return s # 这里是函数的返回值 print(sum_x_y(a, b)) # 其中,x, y 叫做形参,a,b叫实参
2.函数的参数和局部变量
如果你仔细些,你可能在1的代码注释中已经留意到形参和实参了,回去看看吧。
形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只在函数内部有效。函数调用结束返回主调用函数后则不能再使用该形参变量
实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使参数获得确定值
默认参数:
def stu_register(name, age, course, country="CN"): print("----注册学生信息------") print("姓名:", name) print("age:", age) print("国籍:", country) print("课程:", course) stu_register("alex", 32, "python_devops") stu_register("武sir", 28, "linux") stu_register("zingp", 18, "openstack")
注意: 默认参数必须放在非默认参数的后面。
关键参数:
stu_register('alex', course="python", age=22)
正常情况下,给函数传参数要按顺序,不想按顺序就可以用关键参数,只需指定参数名即可,但记住一个要求就是,关键参数必须放在位置参数之后。
非固定参数
若你的函数在定义时不确定用户想传入多少个参数,就可以使用非固定参数
*args:
def stu_register(name, age, *args): # *args 会把多传入的参数变成一个元组形式 print(name, age, args) stu_register("Alex", 32) stu_register("zingp", 18, "CN", "openstack") # Alex 32 () # zingp 18 ('CN', 'openstack')
像第7行那样,如果没有传参,那就是空的元组。
**kwargs:
def stu_info(name, age, *args, **kwargs): # *kwargs 会把多传入的参数变成一个dict形式 print(name, age, args, kwargs) stu_info("Alex", 32) stu_info("zingp", 18, "CN", "openstack", sex="Male", province="BeiJing") # Alex 32 () {} # zingp 18 ('CN', 'openstack') {'sex': 'Male', 'province': 'BeiJing'}
全局与局部变量
如果你想要为一个定义在函数外的变量赋值,那么你就得告诉python这个变量名不是局部的,而是 全局 的。我们使用global语句完成这一功能。没有global语句,是不可能为定义在函数外的变量赋值的。
你可以使用定义在函数外的变量的值(假设在函数内没有同名的变量)。然而,我并不鼓励你这样做,并且你应该尽量避免这样做,因为这使得程序的读者会不清楚这个变量是在哪里定义的。使用global语句可以清楚地表明变量是在外面的块定义的。
def f(x): print("first,x is : %s" % x) x = 'hello' print("now,x is : %s" % x) x = 100 f(x) print(x) # 结果: # first,x is : 100 # now,x is : hello
def f(): global x print("first,x is : %s" % x) x = 'hello' print("now,x is : %s" % x) x = 100 f() print(x) # 执行结果: # first,x is : 100 # now,x is : hello # hello
global语句被用来声明x是全局的——因此,当我们在函数内把值赋给x的时候,也就是全局变脸x的值变成了新的值所以第9行代码结果是hello。
你可以使用同一个global语句指定多个全局变量。例如global x, y, z。
3.函数的返回值
要想获取函数的执行结果,就可以用return语句把结果返回
注意:
- 函数在执行过程中只要遇到return语句,就会停止执行并返回结果,so 也可以理解为 return 语句代表着函数的结束
- 如果未在函数中指定return,那这个函数的返回值为None
取个栗子~~~
def f1(a): return a name = f1('alex') print('f1:',name) # f1: alex def f2(a): print('hello', a) name = f2('alex') print('name:', name) # hello alex # name: None
python【第三篇】函数的更多相关文章
- python的三个函数(eval、exec、complie)和python版RMI
一.python的三个函数: 1.eval函数: 之前已经讲过了这个函数,该函数也类似于php的eval,例如下边这个例子 eval("os.system('id')") 但是有个 ...
- Python第三周 函数详解
def 函数名(): """注释说明"""" 执行逻辑体 return 返回值 定义不带参数的函数 带参数的函数 默认参数 这个是 ...
- Python 第三篇(上):python文件基础操作、json模块、lambda、map、filter、reduce和函数位置参数
python一切皆对象,linux一切皆文件,python操作文件是很常见的O/I操作,其内置来open()函数可以完成文件的基本操作: 一:使用内置open()函数操作文件,基本语法如下: with ...
- Python 第三篇(下):collections系列、集合(set)、单双队列、深浅copy、内置函数
一.collections系列: collections其实是python的标准库,也就是python的一个内置模块,因此使用之前导入一下collections模块即可,collections在py ...
- Python 基础三 文件 函数
今天回顾一下之前学的文件操作相关知识点,对于文件的操作,主要有一下几部分构成: 一.文件的基础知识 1.文件操作的基本流程 文件操作其实可以分成三大部分: 1.打开文件,获取文件句柄并赋予一个变量 2 ...
- 人生苦短我用Python 第三周 函数周
函数的定义: 1,def 函数名(参数1,参数2......): "注释:函数的作用和参数,增加可读性", 2,函数体 3,返回值 最简单的函数: def func(): prin ...
- python第三课--函数
函数的作用 编程大师Martin Fowler先生曾经说过:“代码有很多种坏味道,重复是最坏的一种!”,要写出高质量的代码首先要解决的就是重复代码的问题.例如3次求阶乘: m = int(input( ...
- 新手Python第三天(函数)
Python 函数的创建 def func2(): print('haha') # 函数的返回值 # 函数的返回值,没有定义返回None, # 有一个返回值返回这个object(可以返回一个函数对象) ...
- python第三篇:python、flask关系映射
python中关系映射主要包括三种:一对多关系映射.一对一关系映射.多对多关系映射. 一对多关系映射 一方:Student(学生) 添加关联属性和反向引用 多方:Article(文章) 添加外键关联 ...
- 进击python第三篇:基础
基础拾遗 序列解包 例: >>>x,y,z=1,2,3 >>>print x,y,z 1 2 3 交换变量也是没问题 >>>x,y=y,x > ...
随机推荐
- Django中的Ajax
Ajax 很多时候,我们在网页上请求操作时,不需要刷新页面.实现这种功能的技术就要Ajax!(本人定义,不可迷信) jQuery中的ajax就可以实现不刷新页面就能向后台请求或提交数据的功能,我们仍然 ...
- linux驱动开发之HelloWorld
最近实习,公司项目搞的是平板开发,而我分配的任务是将驱动加载到内核中. 准备工作,必要知识了解:加载有两种方式,一种是动态加载和卸载即模块加载,另一种是直接编译进入内核:Linux内核把驱动程序划分为 ...
- php类获取静态变量值以及调用
<?php class Test{ public static $static_var = 20; } echo Test::$static_var;exit;
- 【Android - 框架】之XBanner的使用
一.XBanner简介 XBanner是一个非常优秀的无限自动轮播框架,也是一个控件.这里是XBanner的GitHub地址 XBanner的主要功能如下: 根据传入的数据条数自动调整广告页数 当图片 ...
- 自己在安装centos 系统时, 是使用英文安装 成功,现在系统语言为英语,如何设置为中文?
作为一个linux菜鸟,遇到的问题可谓真多,在虚拟机VMware上安装好centos系统后,心里甚喜,也连上网络了. 一.遇到的问题 but,火狐浏览器浏览网页出现乱码,也不知道怎么解决?所有的中文都 ...
- ssss
18:15 2013/6/18 未结束的事情1 应用API接口切换2 03in.com 项目管理授权 软件中不成功3 党校考核时间 段列出所有 10:51 2013/6/20 daili 应用修改1 ...
- java EE 学习
http://blog.csdn.net/liushuijinger/article/category/1342030/1
- 《Linux内核分析》-----张超
http://www.cnblogs.com/zhangchao0515/category/797954.html MOOC课程 http://mooc.study.163.com/course/US ...
- FaceBook要在视频领域打败YouTube?
据<纽约时报>报道,FaceBook正在探索一项新的策略来直接把音乐视频嵌入到用户的News Feeds中.目前,具有代表性的视频网站有YouTube和Vimeo,它们可以在社交网络上分享 ...
- c# 的导入功能SqlBulkCopy
private static void DataTableToSQLServer( DataTable dt) { string connectionString = GetConnectionStr ...