python入门之函数

时间:2021-02-25 01:24:09

为什么要用函数

python的函数是由一个新的语句编写,即def ,def是可执行的语句--函数并不存在,知道python运行了def后才存在。

函数是通过赋值函数传递的,参数通过赋值传递给函数。

def语句将会创建一个函数对象并将其赋值给一个函数名,def语句的一般格式如下:

def function_name(arg1,arg2[....]):

  statement

  [return value]

返回值不是必须的,如果没有return语句,则python默认返回None

函数命名规则:

  函数名必须以下花心或字母开头,可以包含任意字母、数字和下划线的组合。不能使用任何标点符号;

  函数名是区分大小写的。

  函数名不能是关键字

函数定义

   def 关键词开头,空格之后接函数名称和圆括号(),最后还有一个":"。

   def 是固定的,不能变,必须是连续的def三个字母,不能分开。。。它们要相亲相爱的在一起。

   空格 为了将def关键字和函数名分开,必须空(四声),当然你可以空2格、3格或者你想空多少都行,但正常人还是空1格。

   函数名:函数名只能包含字符串、下划线和数字且不能以数字开头。虽然函数名可以随便起,但我们给函数起名字还是要尽量简短,并能表达函数功能

   括号:是必须加的!

注释:每一个函数都应该对功能和参数进行相应的说明,应该写在函数下面第一行。以增强代码的可读性。

函数的返回值

关键字:return

#runturn的作用:

  #结束函数的执行

  #返回要返回的值

#返回值得两种情况

1)返回值为None

2)返回值不为None

  • 返回一个值
  • 返回多个值

函数调用--接收返回值

1)返回值为None

2)返回值不为None

  • 返回一个值    用一个变量接收
  • 返回多个值  
    • 用一个变量接收为元组数据形式
    • 用等于返回值数的变量接收

参数

定义的角度:

  1. 位置参数
  2. 默认参数
  3. 动态参数
    • *args 位置传参,元组形式传参
    • **kwargs ,关键字传参   

   

参数接收顺序

  1. 位置参数
  2. *args  默认参数  元组    (1,2)
  3. **kwargs 动态参数 字典  {a:1,b:2}

调用函数角度:

  1. 位置参数
  2. 关键字传参  func(1,2)  
  3. 动态参数 *tup **dic func(a = 1,b = 2)

 装饰器:

 由于函数也是一个对象,而且函数对象可以赋值给变量,所以通过变量也能调用该函数

def now():
print('hello world') f= now
f() print(now.__name__)  # 输出 now
print(f.__name___) # 输出 now

  现在,假设我们要增强now()函数的功能,比如,在函数调用前后自动打印日志,但又不希望修改now()函数的定义,这种在代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator)。

def log(func):
def wrapper(*args, **kw):
print('call %s():' % func.__name__)
return func(*args, **kw)
return wrapper

  观察上面的log,因为它是一个decorator,所以接受一个函数作为参数,并返回一个函数。我们要借助Python的@语法,把decorator置于函数的定义处:

@log
def now():
print('hello')

 把@log放到now()函数的定义处,相当于执行了语句:

now = log(now)

  

由于log()是一个decorator,返回一个函数,所以,原来的now()函数仍然存在,只是现在同名的now变量指向了新的函数,于是调用now()将执行新函数,即在log()函数中返回的wrapper()函数。

wrapper()函数的参数定义是(*args, **kw),因此,wrapper()函数可以接受任意参数的调用。在wrapper()函数内,首先打印日志,再紧接着调用原始函数。

如果decorator本身需要传入参数,那就需要编写一个返回decorator的高阶函数,写出来会更复杂。比如,要自定义log的文本:

def outer(text):
def decorator(func):
def wrapper(*args, **kw):
print('%s %s():' % (text, func.__name__))
return func(*args, **kw)
return wrapper
return decorator

 这个3层嵌套的decorator用法如下:

@outer('execute')
def now():
print('hello')
now()

 执行结果如下:

execute now()
hello

 和两层嵌套的decorator相比,3层嵌套的效果是这样的:

now = outer('execute')(now)

 一个函数调用多个装饰器

@outer('execute')
@log
def now():
print('hello')

  执行结果如下:

execute wrapper():
call now():
hello

 两个装饰器的效果是这样的:

now = outer('execute')(log(now))
now()

  

 或者

now = log(now)
now = outer('execute')(now)
now()

  

  

python入门之函数的更多相关文章

  1. Python入门篇-函数、参数及参数解构

    Python入门篇-函数.参数及参数解构 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.函数概述 1>.函数的作用即分类 函数 数学定义:y=f(x) ,y是x的函数,x ...

  2. Python入门之 函数

    Python入门之 函数 1.初识函数 1.1 什么是函数? <1> 将某个功能封装到一个空间中就是一个函数 <2> 减少重复代码 1.2 定义函数 def -- python ...

  3. Python入门-初始函数

    今天让我们来初步认识一个在python中非常重要的组成部分:函数 首先,让我们来幻想这样一个场景: 比如说我们现在想要通过社交软件约一个妹子,步骤都有什么? print('打开手机 ') print( ...

  4. python入门15 函数

    函数的主要作用是实现代码复用 1 python内置函数 2 匿名函数lambda 3 自定义函数 def functionname(arg):... #coding:utf-8 #/usr/bin/p ...

  5. python入门总结-函数

    函数形式: def functionname(paramlist): function body 局部变量不改变实参的值,如果需要改变,声明global.比如,global x 可以给函数默认值,注意 ...

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

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

  7. Python入门之函数的嵌套&sol;名称空间&sol;作用域&sol;函数对象&sol;闭包函数

    本篇目录: 一.函数嵌套 二.函数名称空间与作用域 三.函数对象 四.闭包函数 ============================================================ ...

  8. Python入门day04&lowbar;函数与装饰器

    一.函数入门 什么是函数: # 函数:函数是一系列代码的集,用来完成特定功能的代码块,类似于工具,可以重复不但的去使用 为什么要有函数: # 优点:# 1. 避免代码的冗余 # 2. 让程序代码结构更 ...

  9. python入门之函数对象

    目录 函数是第一类对象 1.函数名可以被引用 2.函数名可以当做参数传递 3.函数名可以当做返回值使用 4.函数名可以被当做容器类型的元素 函数是第一类对象 First-Class Object : ...

随机推荐

  1. DataSet用法详细 转

    DataSet用法详细 转 DataSet用法详细 一.特点介绍 1.处理脱机数据,在多层应用程序中很有用. 2.可以在任何时候查看DataSet中任意行的内容,允许修改查询结果的方法. 3.处理分级 ...

  2. monkeyrunner之环境搭建及实例(三)

    Monkeyrunner工具提供了一个API,使用此API写出的程序可以在Android代码之外控制Android设备和模拟器. 一.Monkeyrunner简介 1.MOnkeyrunner相对Mo ...

  3. vue 滚动加载

    <template> <div class="wraper" @scroll="onScroll($event)"> <div c ...

  4. PHP-CGI&comma; FastCGI&comma; PHP-FPM的关系和区别

    Web server(apache, nginx) 接受到一个php请求后要解析php文件, 怎么解析呢, web server是C语言写的, 所以需要一个协议, 一个php解释器, 也就是CGI. ...

  5. U3D 实现子弹发射效果

    首先,这里子弹要模拟的相似的话,用2D刚体比较好,会有重力,*落体运动. using UnityEngine; using System.Collections; public class gun ...

  6. nodeJS之fs文件系统

    前面的话 fs文件系统用于对系统文件及目录进行读写操作,本文将详细介绍js文件系统 概述 文件 I/O 是由简单封装的标准 POSIX 函数提供的. 通过 require('fs') 使用该模块. 所 ...

  7. 转:【Java并发编程】之二十三:并发新特性—信号量Semaphore(含代码)

    载请注明出处:http://blog.csdn.net/ns_code/article/details/17524153 在操作系统中,信号量是个很重要的概念,它在控制进程间的协作方面有着非常重要的作 ...

  8. 拯救莫莉斯 状压dp

    题目大意:每个点有费用,要求选出花费最少的一些点,使得全部点都满足:他被选或与他相邻的任意点被选. 没看清数据范围233333 和翻格子游戏一样,考虑上中下三行,可行才能转移 f[i][j][k]表示 ...

  9. js——图片懒加载

    <img class="js-lazy-image centered" src="./img/dog-running.svg" width="4 ...

  10. Python &ast;Mix&lowbar;w2

    1.循环: 执行流程: 1. 判断条件是否为真. 如果真. 执行代码块 2. 再次判断条件是否为真...... 3. 当条件为假.执行else 跳出循环. 循环结束. while 条件: 代码块(又叫 ...