阅读目录

一、为什么要使用函数

二、函数的定义与调用

三、函数返回值

四、函数的参数

五、本章小结

六、装饰器

一、函数流程图:

  

  函数名的命名规则:

  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. 实现如下语法的功能:var a = add(2)(3)(4); //9

    从汤姆大叔的博客里看到了6个基础题目:本篇是第6题 - 实现如下语法的功能:var a = add(2)(3)(4); //9 解题关键:add()函数需要返回一个加法函数,而不是一个普通的值,即定义 ...

  2. Python的网络编程[1] -> FTP 协议[0] -> FTP 的基本理论

    FTP协议 / FTP Protocol FTP全称为File Transfer Protocol(文件传输协议),常用于Internet上控制文件的双向传输,常用的操作有上传和下载.基于TCP/IP ...

  3. FZU-2270 Two Triangles(两个三角形全等)

    原题地址: 题意: 给出n个点,有两个人,每个人可以选3个点,问有多少种情况是可以找出两个三角形,是可以通过旋转使其全等.   思路: 所以首先要是三角形即三点不能共线,其次要全等,即三条边对应相等, ...

  4. 使用参数化SQL

    Java.C#等语言提供了参数化SQL机制,使用参数化SQL开发人员为在运行时才能确定的参数值设置占位符,在执行的时候再指定这些占位符所代表的值.示例代码如下: string user=txtUser ...

  5. SQL SERVER 补丁查看

    SELECT   @@VERSION as 版本情况 SELECT SERVERPROPERTY('ProductVersion') as 产品版本编号, SERVERPROPERTY('Produc ...

  6. linux之vim命令

    :tabe fn     在一个新的标签页中编辑文件fngt     切换到下一个标签页gT     切换到上一个标签页:tabr     切换到第一个标签页:tabl     切换到最后一个标签页: ...

  7. [置顶] kubernetes--应用程序健康检查

    K8S的应用程序健康检查分为livenessProbe和readinessProbe,两者相似,但两者存在着一些区别. livenessProbe在服务运行过程中检查应用程序是否运行正常,不正常将杀掉 ...

  8. A folder failed to be renamed or moved--安装Android SDK的问题

    对于Android是一直想学却一直未学,行动跟不上想法.现在,终于付诸于行动了. 首先,我找的第一个Android的资料是大话企业级Android,前阵子刚看完大话设计模式,通俗易懂,还是比较喜欢这一 ...

  9. Ubuntu中彻底修改用户名及密码

    转自:http://blog.csdn.net/sailor201211/article/details/52305591 方案二:修改与用户和组相关的配置文件 这种方法更加本质,直接修改与用户和组相 ...

  10. consist of, made up of

    consist vi.由……组成:由……构成(常和介词of构成固定搭配)made up of由……组成[例如] One year consists of 365 days.一年有365天.The te ...