阅读目录

一、为什么要使用函数

二、函数的定义与调用

三、函数返回值

四、函数的参数

五、本章小结

六、装饰器

一、函数流程图:

  

  函数名的命名规则:

  1、函数名必须由字母下划线数字组成,不能是关键字和数字开头

2、函数名还是要有一定的意义能够简单说明函数的功能

  初识函数定义:

  新建一个mylen的函数

def mylen():
'''计算S1 的长度'''
s1 = 'hello world'
length = 0
for i in s1:
length = length + 1
print(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 y
return the_max ma = mymax(10,20)
print(ma)

  位置参数

  站在实参的角度

  1、按照位置传值  

def mymax(x,y):
#此时x=10,y=20
the_max = x if x > y else y
return the_max ma = mymax(10,20)
print(ma)

  2、按照关键字传值  

def mymax(x,y):
#此时x = 20,y = 10
print(x,y)
the_max = x if x > y else y
return the_max ma = mymax(y = 10,x = 20)
print(ma)

  3、位置、关键字形式混着用  

def mymax(x,y):
#此时x = 10,y = 20
print(x,y)
the_max = x if x > y else y
return the_max ma = mymax(10,y = 20)
print(ma)

  正确用法

  问题一:位置参数必须在关键子参数的前面

  问题二:对于一个形参只能赋值一次

  站在形参的角度

  位置参数必须传值  

def mymax(x,y):
#此时x = 10,y = 20
print(x,y)
the_max = x if x > y else y
return 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 = 0
for i in args:
the_sum+=i
return the_sum the_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相当于返回 None def 函数名(参数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 ret
return inner
return wrapper

Python基础之函数与装饰器的更多相关文章

  1. python基础-闭包函数和装饰器

    闭包函数和装饰器 闭包函数 概念:在函数中(嵌套)定义另一个函数时,内部函数引用了外层函数的名字. 特性 闭包函数必须在函数内部定义 闭包函数可引用外层函数的名字 闭包函数是函数嵌套.函数对象.名称空 ...

  2. Python全栈开发之路 【第五篇】:Python基础之函数进阶(装饰器、生成器&迭代器)

    本节内容 一.名称空间 又名name space,就是存放名字的地方.举例说明,若变量x=1,1存放于内存中,那名字x存放在哪里呢?名称空间正是存放名字x与1绑定关系的地方. 名称空间共3种,分别如下 ...

  3. 十一. Python基础(11)—补充: 作用域 & 装饰器

    十一. Python基础(11)-补充: 作用域 & 装饰器 1 ● Python的作用域补遗 在C/C++等语言中, if语句等控制结构(control structure)会产生新的作用域 ...

  4. Python入门之函数的装饰器

    本章目录: 装饰器: 一.为什么要用装饰器 二.什么是装饰器 三.无参装饰器 四.装饰器语法糖 五.认证装饰器实现 六.叠加多个装饰器 七.带参装饰器 ======================== ...

  5. python基础16_闭包_装饰器

    不了解是否其他语言也有类似 python 装饰器这样的东西. 最近才发现ECMAScript6也是有生成器函数的,也有 yield  generator 装饰器的基础知识是闭包: # 闭包:嵌套函数, ...

  6. python基础整理4——面向对象装饰器惰性器及高级模块

    面向对象编程 面向过程:根据业务逻辑从上到下写代码 面向对象:将数据与函数绑定到一起,进行封装,这样能够更快速的开发程序,减少了重复代码的重写过程 面向对象编程(Object Oriented Pro ...

  7. python基础知识-11-函数装饰器

    python其他知识目录 1.装饰器学习前热身准备 1.1装饰器简介 1.2装饰器热身分析 ) def func(): pass v1 = v2 = func #将函数名赋予一个变量,就和变量赋值是同 ...

  8. Python基础(八)装饰器

    今天我们来介绍一下可以提升python代码逼格的东西——装饰器.在学习装饰器之前我们先来复习一下函数的几个小点,方便更好的理解装饰器的含义. 一.知识点复习 1, 在函数中f1和f1()有什么不同,f ...

  9. Py修行路 python基础 (十)装饰器

    装饰器 一.定义 装饰器:顾名思义,就是对某个东西起到装饰修饰的功能. python中的装饰器,其本质上就是一个python函数,它可以让其他函数在不需要任何代码变动的前提下增加额外功能.通俗理解就是 ...

随机推荐

  1. Activator常用方法

    1.获取图片 public static Image getImage(String key) {        Image img = getDefault().getImageRegistry() ...

  2. Python与数据库[1] -> 数据库接口/DB-API[3] -> ODBC 适配器

    ODBC适配器 / ODBC Adaptor ODBC(Open Database Connectivity,开放数据库互连)是微软公司开放服务结构(WOSA,Windows Open Service ...

  3. 牛客小白月赛6 指纹锁(set容器的骚操作)

    原题地址: 题目描述     HA实验有一套非常严密的安全保障体系,在HA实验基地的大门,有一个指纹锁.     该指纹锁的加密算法会把一个指纹转化为一个不超过1e7的数字,两个指纹数值之差越小,就说 ...

  4. Windows 定时删除指定路径下N天前的日志文件

    Windows 定时删除指定路径下N天前的日志文件 Windows 下bat脚本文件的内容为 1. 删除指定路径下5天前的所有文件 @echo off set SrcDir=E:\WORK\Git s ...

  5. 在VisualStudio 工具箱中隐藏用户控件

    当我们创建一个用户控件后,VisualStudio会自动将其添加到工具箱中,本来这是一个比较贴心的设计.但是,有的时候,我们并不想将用户控件放到工具箱中. 例如:在WPF中,为了避免一个页面的控件过多 ...

  6. mysql系列-安装及服务启动

    一.window下的安装 详细见官网 https://dev.mysql.com/doc/refman/5.7/en/windows-installation.html 以 MySQL 5.1 免安装 ...

  7. Introduction to the TestFlight SDK

    https://developer.apple.com/testflight/ When you want to test an app on your device, usually you plu ...

  8. 基于Prometheus,Alermanager实现Kubernetes自动伸缩

    到目前为止Kubernetes对基于cpu使用率的水平pod自动伸缩支持比较良好,但根据自定义metrics的HPA支持并不完善,并且使用起来也不方便. 下面介绍一个基于Prometheus和Aler ...

  9. git reset revert区别

    git revert HEAD~1 撤销倒数第二次提交,并将这次操作作为一个新提交添加到log里,之前的提交历史不变,是撤销某次提交 git reset,直接回退到指定版本 git reset --s ...

  10. Node.js模块导出exports 和 module.exports 的区别

    原文: https://blog.csdn.net/Pwiling/article/details/51958693 每一个node.js执行文件,都自动创建一个module对象,同时,module对 ...