Python基础之函数与装饰器
阅读目录
一、为什么要使用函数
二、函数的定义与调用
三、函数返回值
四、函数的参数
五、本章小结
六、装饰器
一、函数流程图:
函数名的命名规则:
1、函数名必须由字母下划线数字组成,不能是关键字和数字开头
2、函数名还是要有一定的意义能够简单说明函数的功能
初识函数定义:
新建一个mylen的函数
def mylen():'''计算S1 的长度'''s1 = 'hello world'length = 0for i in s1:length = length + 1print(length)
初识函数调用:
通过调用mylen的函数,实现计算hello word的长度。
str_len = mylen() print('str_len:%s'%str_len)
以上代码也只是完成调用,但是函数体内并没有返回值,所以调用为None,使用return关键字返回结果。代码如下:
return length #将函数体内的值赋给mylen str_len = mylen() print('str_len:%s'%str_len)
return关键字的作用:
return是一个关键字,在pycharm里会高亮显示。
函数体内不写return的情况下,会默认返回一个None,需要注意的是return和返回值之间要由一个空格,return可以返回任意数据类型的值。
返回多个值:
可以返回多个值,会被组织成元祖返回,也可以用多个值来接受。
函数的参数:
我们要告诉mylen函数要计算的字符串是谁,这个过程就叫做传递参数,简称传参,我们调用函数的传递这个'hello world'和定义函数时的S1就是参数。
实参与形参:
我们调用函数时传递的这个'hello world'被称为实际参数,因为这个是要实际交歌函数的内容,简称实参。
定义函数时的S1,只是一个变量的名字,被称为形式参数。因为在定义函数的时候它只是一个形式,表示这里有一个参数,简称形参。
参数传递:
传递多个参数
参数可以传递多个,多个参数间用逗号分割。(举例如下)
def mymax(x,y):the_max = x if x > y else yreturn the_maxma = mymax(10,20) print(ma)
位置参数
站在实参的角度
1、按照位置传值
def mymax(x,y):#此时x=10,y=20the_max = x if x > y else yreturn the_maxma = mymax(10,20) print(ma)
2、按照关键字传值
def mymax(x,y):#此时x = 20,y = 10print(x,y)the_max = x if x > y else yreturn the_maxma = mymax(y = 10,x = 20) print(ma)
3、位置、关键字形式混着用
def mymax(x,y):#此时x = 10,y = 20print(x,y)the_max = x if x > y else yreturn the_maxma = mymax(10,y = 20) print(ma)
正确用法
问题一:位置参数必须在关键子参数的前面
问题二:对于一个形参只能赋值一次
站在形参的角度
位置参数必须传值
def mymax(x,y):#此时x = 10,y = 20print(x,y)the_max = x if x > y else yreturn the_max#调用mymax不传递参数 ma = mymax() print(ma)#结果 TypeError: mymax() missing 2 required positional arguments: 'x' and 'y'
默认参数
1、正常使用
使用方法
为什么要有默认参数:将变化较小的值设置成默认参数
2、默认参数的定义
def stu_info(name,sex = "male"):"""打印学生信息函数,由于班中大部分学生都是男生,所以设置默认参数sex的默认值为'male'"""print(name,sex) stu_info('alex') stu_info('eva','female')
3、参数陷阱:默认参数是一个可变数据类型
def defult_param(a,l = []):l.append(a)print(l)defult_param('alex') defult_param('egon')
动态参数
按位置传值多余的参数都由args统一接受,保存成一个元祖的形式
def mysum(*args):the_sum = 0for i in args:the_sum+=ireturn the_sumthe_sum = mysum(1,2,3,4) print(the_sum)
def stu_info(**kwargs):print(kwargs)print(kwargs['name'],kwargs['sex'])stu_info(name = 'alex',sex = 'male')
本章小结
面向过程编程的问题:代码冗余、可读性差、可扩展性差(不易修改)
定义函数的规则:
1.定义:def 关键词开头,空格之后接函数名称和圆括号()。 2.参数:圆括号用来接收参数。若传入多个参数,参数之间用逗号分割。参数可以定义多个,也可以不定义。参数有很多种,如果涉及到多种参数的定义,应始终遵循位置参数、 *args、默认参数、**kwargs顺序定义。如上述定义过程中某参数类型缺省,其他参数依旧遵循上述排序 3.注释:函数的第一行语句应该添加注释。 4.函数体:函数内容以冒号起始,并且缩进。 5.返回值:return [表达式] 结束函数。不带表达式的return相当于返回 Nonedef 函数名(参数1,参数2,*args,默认参数,**kwargs):"""注释:函数功能和参数说明"""函数体……return 返回值
调用函数的规则:
1.函数名()函数名后面+圆括号就是函数的调用。 2.参数:圆括号用来接收参数。若传入多个参数:应按先位置传值,再按关键字传值具体的传入顺序应按照函数定义的参数情况而定 3.返回值如果函数有返回值,还应该定义“变量”接收返回值如果返回值有多个,也可以用多个变量来接收,变量数应和返回值数目一致无返回值的情况: 函数名()有返回值的情况: 变量 = 函数名()多个变量接收多返回值: 变量1,变量2,... = 函数名()
装饰器
不带参数的装饰器:
def wrapper(func):def inner(*args,**wargs):'''函数执行之前代码块'''ret=func()return ret'''函数执行之后代码块'''return inner
带参数的装饰器:
F = False #装饰器开关, def outer(flag):def wrapper(func):def inner(*args,**kwargs):if flag:print('before')ret = func(*args,**kwargs)print('after')else:ret = func(*args, **kwargs)return retreturn innerreturn wrapper
转载于:https://www.cnblogs.com/bingpan/p/7236007.html
Python基础之函数与装饰器相关推荐
- python基础二 函数 递归 装饰器 迭代器 生成器 内置函数 二分法应用
函数 迭代器 生成器 拆包和装包 tup=("j1","a1","c1","k1") a,b,c,d=tup print ...
- 十一. Python基础(11)—补充: 作用域 装饰器
十一. Python基础(11)-补充: 作用域 & 装饰器 1 ● Python的作用域补遗 在C/C++等语言中, if语句等控制结构(control structure)会产生新的作用域 ...
- python中高阶函数和装饰器_Python高阶函数与装饰器函数的深入讲解
本文主要介绍的是Python高阶函数与装饰器函数的相关内容,分享给大家,下面话不多说了,来一起看看详细的介绍吧 高阶函数 1.可以使用函数对象作为参数的函数 2.或可以将函数作为返回值的函数 3.函数 ...
- Python练习之函数,装饰器,面向对象
Python练习之函数,装饰器,面向对象 1.函数 2 装饰器 3.面向对象 1.函数 编写函数,实现接受一个字符串,分别统计大小写字母,数字,其他字符的个数,并返回结果 #方法一 str=input ...
- python高阶函数闭包装饰器_Python_基础_(装饰器,*args,**kwargs,高阶函数,函数闭包,函数嵌套)...
一,装饰器 装饰器:本质就是函数,功能是为其它的函数动态添加附加的功能 原则:对修改关闭对扩展开放 1.不修改被修饰函数的源代码 2.不修改被修改函数的调用方式 装饰器实现的知识储备:高阶函数,函数嵌 ...
- python基础知识-11-函数装饰器
python其他知识目录 1.装饰器学习前热身准备 1.1装饰器简介 1.2装饰器热身分析 1) def func():pass v1 = 10 v2 = func #将函数名赋予一个变量,就和变量赋 ...
- python中高阶函数和装饰器_三.Python高阶函数和装饰器
1高阶函数 1.1 数学概念回顾下数学知识: y=f(x) 这是最开始接触的普通函数 y=g(f(x)) 这个就是我们接触到的高阶函数 在数学和计算机科学中,高阶函数至少应当是满足下面一个条件的函数: ...
- python高阶函数闭包装饰器_Python自学从入门到就业之高阶函数、嵌套函数、闭包、装饰器...
高阶函数 在Python中,函数其实也是一种数据类型. def test(): return 'hello world' print(type(test)) # 函数对应的数据类型是 function ...
- Day4 - Python基础4 迭代器、装饰器、软件开发规范
Python之路,Day4 - Python基础4 (new版) 本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 1. ...
最新文章
- 天数换算月份_Js 计算指定月份的天数
- Glide 框架解析
- 清华大学计算机网络研究中心,清华大学信息网络工程研究中心简介
- php cookie删除不了,php cookie删除不了怎么办
- [笔记]NumPy基础操作
- 工作组访问不到别人的计算机,众果搜的博客
- django 1.8 官方文档翻译:2-1-1 模型语法
- 证明一下拉普拉斯的《概率分析论》观点
- 016.OpenStack及云计算(面试)常见问题
- JAVAWEB开发之数据库简介、MySQL的安装与卸载(处理中文乱码)、以及MySQL语言(DDL、DML、DCL、DQL)的详解和使用
- VsCode中文输出为乱码的原因及解决方法
- 【java】详解native方法的使用
- 中国互联网发展状况报告:境内约 2.6 万网站被植入后门
- STM32 学习十 Flash下载与调试
- java 数字转换字母大写_大写字母或小写字母转换为数字
- 最新鑫迪自助建站系统源码V1.1完整版
- 0021:孩子也是要将心比心的
- Unity3D坦克大战游戏开发——学习笔记(下)
- 黑苹果睡眠唤醒usb失灵_黑苹果解决USB3.0驱动问题
- 解决win10搜索框不能用的问题
热门文章
- Aristochart – 灵活的 HTML5 Canvas 折线图
- Java学习之模拟纸牌游戏,List的ArrayList,Map的HashMap,重写Collections类的sort方法对指定类进行通过特定属性排序,输入异常处理等的学习...
- Hadoop生态圈以及各组成部分的简介
- ios 导航栏(自己定义和使用系统方式)
- SVG 基础知识 回顾
- 前端学习 -- 内联框架iframe
- iOS开发之 [NSNull length]:unrecognized selector sent
- mysql 存储过程调用权限消失的问题,恢复权限
- 快速启动栏的现实桌面快捷方式
- 知道Google map上面街景怎么来的吗?-相当强大