python3基础(七)函数基础
Function
函数是一段组织好的能够实现特定功能或者逻辑的代码块,函数代码在文件执行时读入内存并不执行,在调用函数时执行,简单来说是把一段代码封装给一个函数名(可以用变量的概念去理解,即把一段代码赋值给一个函数名),当使用函数名加执行标记时才运行这段内存中的代码.函数的作用可以减少重复代码,在不同的地方要使用相同的代码块,我们就可以把这段代码封装成函数.同时当多处相同的代码需要修改时,只需要修改函数定义时一处即可扩展性好.
#定义函数
def func_name(parameters):
name = parameters
print('exec code with %s' %name)
return 'some code'
#函数的调用
func_name('sylar')
a = func_name()
print(a)
参数
函数在定义和调用的时候是可以传入参数,在定义时申明的参数称为形参,在函数调用时传入的参数称为实参.一般来说形参只在函数内生效,但是当传入的是list(列表),dict(字典),func(函数)由于这些复杂数据类型传入是对象的内存地址,所以在函数内做了修改,在函数外也会产生响应的修改.因此参数可以分为可变参数和不可变参数.但我们通常在使用中一般将函数的参数使用传入的方式来分类:
- 位置参数
根据定义函数时的形参位置一一对应的传入参数,形参和实参顺序必须一致.
def fun1(name, age, post):
print('My name is %s' % name)
print('At the age of %s' % age)
print('The position is %s' % post)
fun1('sylar',18,'IT')
- 关键字参数
使用形参的关键字确定传入实参的值,此时不需要关注参数的顺序
def fun1(name, age, post):
print('My name is %s' % name)
print('At the age of %s' % age)
print('The position is %s' % post)
fun1(name='sylar',post='IT',age=18,)
fun1('tom',post='IT',age=19,)
关键字参数和位置参数的方式可以混用,但是记住不能在关键字参数前传入位置参数
#错误的调用
fun1(name='sylar',age=18,'IT')
- 默认参数
在定义形参的时候,给参数设置一个默认值.在调用函数时不传入这个参数就使用默认值.
def fun1(name, age, post='IT'):
print('My name is %s' % name)
print('At the age of %s' % age)
print('The position is %s' % post)
fun1(name='sylar',age=18)
默认参数也可以和其它参数混搭使用,但是默认参数只能定义在所有参数的尾部.传入参数的时候只需要遵循放在位置参数之后传入
#错误的定义
def fun1(post='IT',name, age):
- 不定长参数
在定义一个函数时,会出现我们并不知道我们使用函数时会传入多少个参数的情况,这时候就可以使用不定长参数.使用*args和**kwargs
#*args会将收到的参数组合为一个元组
def fun1(name,age,*args,):
print('My name is %s' % name)
print('At the age of %s' % age)
print(args)
hope_list= ','.join(args)
print('He hopes list is:%s'%hope_list)
fun1('sylar',18,'IT','travel','movie')
#kwargs会将传入的参数组合为字典,在函数内调用需要函数内代码去获取字典的key才可以取到对应的值
def fun2(**kwargs):
print(kwargs)
name = kwargs['name']
age = kwargs['age']
print('My name is %s' % name)
print('At the age of %s' % age)
fun2(name='sylar',age=18)
局部变量和全局变量
首先需要理解名称空间和作用域,名称空间是指对某段代码进行命名的操作,例如变量名,函数名.全局变量是在整个文件顶部定义,对整个文件都生效.局部变量是相对而论的,我们先来看一个例子(这几个概念,我也不能很好的阐述)
g_var = 'this is global var'
def foo():
l_var = 'in the foo!this is local var'
print(g_var)
print(l_var)
def foo1():
l_var = 'in the other foo !this is local var'
print(g_var)
print(l_var)
foo()
foo1()
print(g_var)
print(l_var)
在这个例子中,g_var是在整个代码块中都生效的,那么g_var就是这个代码块的全局变量,而l_var只在函数foo中生效,那么l_var就是foo的局部变量.而在foo1的l_var又是它自己内部定义的局部变量
当局部变量和全局变量同名时,局部变量只在他所属的代码块内生效.并不能影响代码块外的全局变量.同时需要注意的是,局部变量优先.
some_var = 'this is global var'
print(some_var)
def foo():
some_var = 'this is local var'
print(some_var)
foo()
print(some_var)
返回值
在函数中使用ruturn语句,让函数返回一个结果给函数外的调用.如果没有定义ruturn,函数会返回一个None.当函数执行了return将会跳出函数,不再继续执行函数中的代码
#没有ruturn的返回值
def foo():
print('welcome')
a = foo()
print(a)
#定义return的返回值和return后的代码不会执行
def foo(x,y):
z = x + y
return z
print('welcome')
a = foo(1,2)
print(a)
嵌套函数
在函数中嵌套一层函数
def first_func():
print('in the first')
def second_func():
print('in the second')
second_func()
first_func()
second_func() #此时在外面是不能调用嵌套内的函数
补充,使用嵌套函数去试试局部变量能更好的理解局部变量的使用
匿名函数
lamba主体通常就是一个表达式,是函数的一个高级用法,在某些特定场景需要使用函数时使用
sum = lambda arg1, arg2: print(arg1 + arg2);
sum(1,2)
def func(arg1,arg2):
print(arg1+arg2)
func(1,2)
列表生成式:
列表生成式表现方式类似于三元运算和匿名函数lambda函数.通过简化代码执行一个教复杂的运算逻辑.这算是函数的一个扩展场景吧
#普通代码
def func(i):
if i < 5:
i=i+1
else:
i=i*2
return i
a = []
for i in range(10):
num = func(i)
a.append(num)
#通过列表生成式来完成相同的功能
def func(i):
if i < 5:
i=i+1
else:
i=i*2
return i
a = [func(i) for i in range(10)]
补充 三元运算表达式: 为真时的结果 if 判定条件 else 为假时的结果
a = 2 if 1>3 else 6
print(a)
a = 2 if 1>3 else 6
print(a)
python3基础(七)函数基础的更多相关文章
- python基础(七)函数
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 函数最重要的目的是方便我们重复使用相同的一段程序. 将一些操作隶属于一个函数,以后 ...
- Day9 Python基础之函数基础(七)
参考链接:https://www.cnblogs.com/yuanchenqi/articles/5828233.html 1.函数的定义 定义: 函数是指将一组语句的集合通过一个函数名封装起来,要想 ...
- Python 入门基础10 --函数基础3 函数对象、名称空间、装饰器
今日内容 1.函数对象 2.名称空间与作用域 3.函数的嵌套调用与闭包 4.装饰器 一.函数对象 1.1 定义 函数名存放的就是函数地址,所以函数名也就是对象,称之为函数对象 1.2 函数对象的应用 ...
- Python 入门基础11 --函数基础4 迭代器、生成器、枚举类型
今日目录: 1.迭代器 2.可迭代对象 3.迭代器对象 4.for循环迭代器 5.生成器 6.枚举对象 一.迭代器: 循环反馈的容器(集合类型) 每次重复即一次迭代,并且每次迭代的结果都是下一次迭代的 ...
- Python 入门基础8 --函数基础1 定义、分类与嵌套使用
目录 零.了解函数 一.函数的组成 二.函数的定义 三.函数的使用 四.函数的分类 五.函数的嵌套使用 零.了解函数 1.什么是函数 在程序中函数就是具备某一功能的工具 2.为何用函数 为了解决以下问 ...
- Python 入门基础9 --函数基础2 实参与形参
今日内容: 一.函数参数 1.形参与实参定义 2.实参分类 3.形参分类 4.可变参数的整体使用 一.形参与实参定义 def fn(参数们): pass 1.1 形参 定义函数,在括号内声明的变量名, ...
- Python 入门基础12 --函数基础5 匿名函数、内置函数
今日内容: 1.三元表达式 2.列表.元组生成式 | 字典生成式 3.递归 4.匿名函数 5.内置函数 一.三元表达式 三元运算符:就是 if...else... 语法糖 前提:if 和 else # ...
- 七. Python基础(7)--文件的读写
七. Python基础(7)--文件的读写 1 ● 文件读取的知识补充 f = open('file', encoding = 'utf-8') content1 = f.read() content ...
- PHP基础入门(三)---PHP函数基础
PHP基础入门(三)---函数 今天来给大家分享一下PHP的函数基础.有了前两章的了解,想必大家对PHP有了一定的基础了解.想回顾前两章的朋友可以点击"PHP基础入门(一)"&qu ...
随机推荐
- Java爬虫——人人网模拟登录
人人网登录地址:http://www.renren.com/ 此处登录没有考虑验证码验证码. 首先对登录方法进行分析 有两种方法. 一)在Elements中分析源码 发现登录点击后的事件是http:/ ...
- 动态规划-迷宫-百度之星-Labyrinth
Labyrinth Problem Description 度度熊是一仅仅喜欢探险的熊.一次偶然落进了一个m*n矩阵的迷宫,该迷宫仅仅能从矩阵左上角第一个方格開始走,仅仅有走到右上角的第一个格子才算走 ...
- hdu 1233 还是畅通project(kruskal求最小生成树)
还是畅通project Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Tota ...
- JS 循环遍历JSON数据 分类: JS技术 JS JQuery 2010-12-01 13:56 43646人阅读 评论(5) 收藏 举报 jsonc JSON数据如:{"options":"[{
JS 循环遍历JSON数据 分类: JS技术 JS JQuery2010-12-01 13:56 43646人阅读 评论(5) 收藏 举报 jsonc JSON数据如:{"options&q ...
- Mybatis 入门之resultMap与resultType解说实例
resultMap:适合使用返回值是自己定义实体类的情况 resultType:适合使用返回值得数据类型是非自己定义的,即jdk的提供的类型 resultMap : type:映射实体类的数据类型 i ...
- springboot + @scheduled 多任务并发
一.问题 项目采用springboot搭建,想给方法添加@Scheduled注解,实现两个定时任务.可是运行发现,两个task并没有并发执行,而是执行完一个task才会执行另外一个.上代码: pack ...
- 控制反转-Ioc之Unity
本篇幅主要介绍控制反转的一些概念,和如何使用Unity实现Ioc.在介绍的时候,会尽量结合代码来讲解一些概念. 1.什么是DI? DI即控制反转,是将对具体实现类的依赖转变为对接口的依赖,这样在编程中 ...
- IIS 5.x与ASP.NET
转自:http://www.cnblogs.com/artech/archive/2009/06/20/1507165.html 我们先来看看IIS 5.x是如何处理基于ASP.NET资源(比如.as ...
- 微信小程序教学第二章:小程序中级实战教程之预备篇 - 项目结构设计 |基于最新版1.0开发者工具
iKcamp官网:http://www.ikcamp.com 访问官网更快阅读全部免费分享课程:<iKcamp出品|全网最新|微信小程序|基于最新版1.0开发者工具之初中级培训教程分享>. ...
- 智能合约语言 Solidity 教程系列6 - 结构体与映射
写在前面 Solidity 是以太坊智能合约编程语言,阅读本文前,你应该对以太坊.智能合约有所了解, 如果你还不了解,建议你先看以太坊是什么 本系列文章一部分是参考Solidity官方文档(当前最新版 ...