一、函数的定义

首先,我们来看一个简单的例子来定义函数:

def test():
print('hello')

在其中

  def  : 关键字,用来告诉解释器,接下来的一段代码是一个函数

  test : 函数名

  ()    : 用来接收参数

  print('hello') : 函数内部的功能

当解释器执行到函数这一块时,函数内部的功能是不会执行的,只会把这个函数放入到内存中,并且起了个名字,叫test。  直到了遇到了一个指定函数名,

如test()才会真正的去执行。

执行函数的代码如下:

def test():
print('hello') test() #直接调用函数
f=test #把函数名赋值给f
f() #再次执行函数 -----结果-----
hello
hello

  

二、函数的返回值

在执行的函数的时候,如果想知道某个函数执行的一个结果,就需要用到函数的返回值,如:

def add():
a=1
a+=1
return a #给出函数的返回值 b=add() #把函数的返回值赋值给b
print(b) -----结果-----
2

  

如果在函数中,没有用return来给出返回值,而在调用函数的时候,来获取返回值,会有什么现象捏,我们来尝试下:

def add():
a=1
a+=1 b=add()
print(b) -----结果-----
None

由此可见。还是可以获取返回值,只不过返回值为None

return在函数中,除了可以给出一个返回值外,还有另外一个作用,那就是中断函数操作

def test():
print('hello')
return 1
print('world') a=test() -----结果-----
hello #world不会被打印出来

  

三、参数

3.1函数中参数的几种类型:

在一个函数中,可能会有三种情况:

①无参数

②有单个参数

③有多个参数

无参数的情况,在上面的内容中已经举例过,不再过多介绍

关于有参数的情况,首先来介绍下形参和实参

形参:

形参是写在定义函数()中的参数,它只是一种形式参数,如

def add(x)    #定义一个函数add,其中x为形参

实参:

实参是写在调用函数()中的参数,如

def add(x):
... add(2) #调用add函数,其中的2就是实参

3.2单个参数

介绍完了形参和实参,我们来一起看一个简单的单个参数的例子:

 def add(x):
a=1
b=x+1
return b c=add(2)
print(c) d=add(3)
print(d) -----结果-----
3
4

3.3多参数

def test(x,y):
print(x)
print(y) test(1,2) -----结果-----
1
2

当形参中有两个参数,但实参中只有一个参数时,运行会出错:

def test(x,y):
print(x)
print(y) test(1) -----结果-----
TypeError: test() missing 1 required positional argument: 'y'

  

3.4默认参数

关于默认参数,顾名思义,就是一个函数的运行结果中,函数中某个参数的值,不受实参的影响,它有一个固定的值,如:

def test(x,y=2):             #把y设置为一个默认的参数
print(x)
print(y) test(1) -----结果-----
1
2

从上面的例子中,可以看出,在调用函数中,只把1传给了x形参,且没有对y进行传参数。结果可以照样运行

但是,如果在使用了默认参数的情况下,形参的数量等于实参的数量,会发生什么现象呢,如下:

def test(x,y=2):
print(x)
print(y) test(1,3) -----结果-----
1
3  

由此,我们可以看到,设置的默认参数没有生效,因此得出一个结论,调用函数时,实参的内容,会覆盖掉形参中的默认参数

注意:在使用默认参数的时候,一定要把默认参数放到形参里的最后面,比如说,下面这个写法就是错误的

def test(x,y=2,z)

3.5指定参数

在一般情况下,调用函数时,实参中参数值的传递顺序,和函数中形参的顺序是对应起来的,但是,我们也可以使实参中第一个参数的值,传给

形参中第二个参数,如:

def test(x,y):
print(x)
print(y) test(y=2,x=1) #把2传给了y,把1传给了x -----结果-----
1
2

3.6动态参数

当我们在形参中带入一个*,会把会把函数运行结果自动转为了元组

def test(*x):              #在形参中加入了一个*
print(x,type(x)) test(1)
test(1,2,3) -----结果-----
(1,) <class 'tuple'>
(1, 2, 3) <class 'tuple'>

如果在形参中带入两个*,那么会把函数的运行结果转为字典类型

def test(**x):            #在形参中加入了两个*
print(x,type(x)) test(k1=1,k2=2) #实参中,需要把键和值都写入 -----结果-----
{'k1': 1, 'k2': 2} <class 'dict'>

  

那么,如果想要在函数中同时使用元组和字典,该怎么使用捏,如下:

def test(*x,**y):
print(x,type(x))
print(y,type(y)) test(11,22,33,k1=1,k2=2) -----结果-----
(11, 22, 33) <class 'tuple'> #会自动把执行结果分到元组和字典中
{'k1': 1, 'k2': 2} <class 'dict'>

注意:当形参中同时有一个*和两个*时,一定要把一个*放在前面

刚刚我们在调用函数的时候,传的参数为(11,22,33,k1=1,k2=2) ,如果我们把这些传参,分别放入一个列表和一个字典中,再进行调用函数,会有如下现象:

def test(*x,**y):
print(x,type(x))
print(y,type(y)) l=[11,22,33]
d={'k1':1,'k2':2}
test(l,d) -----结果-----
([11, 22, 33], {'k1': 1, 'k2': 2}) <class 'tuple'> #把所有内容都放入了函数的x中
{} <class 'dict'>

如果想把实参分别放入函数的x和y中,可以这样:

def test(*x,**y):
print(x,type(x))
print(y,type(y)) l=[11,22,33]
d={'k1':1,'k2':2}
test(*l,**d) -----结果-----
(11, 22, 33) <class 'tuple'>
{'k1': 1, 'k2': 2} <class 'dict'>

四、lambda表达式

lambda表达式是一种简单函数的表现形式,且自带return

fun=lambda a:a+1         #定义一个lambda表达式,第一个a,相当于函数中的形参,a+1为函数的功能
result=fun(99)
print(result) -----结果-----
100  

python-函数的使用的更多相关文章

  1. python 函数之day3

    一 函数的语法及特性 什么是函数? 定义:函数是一个功能通过一组语句的集合,由名字(函数名)将其封装起来的代码块,要想执行这个函数,只要调用其函数名即可. 特性: 减少重复代码 使程序变的可扩展 使程 ...

  2. Python函数作用域的查找顺序

    函数作用域的LEGB顺序 1.什么是LEGB? L:local 函数内部作用域 E:enclosing 函数内部与内嵌函数之间 G:global 全局作用域 B:build-in 内置作用域 2.它们 ...

  3. Python函数讲解

    Python函数

  4. Python函数信息

    Python函数func的信息可以通过func.func_*和func.func_code来获取 一.先看看它们的应用吧: 1.获取原函数名称: 1 >>> def yes():pa ...

  5. Python函数参数默认值的陷阱和原理深究"

    本文将介绍使用mutable对象作为Python函数参数默认值潜在的危害,以及其实现原理和设计目的 本博客已经迁移至: http://cenalulu.github.io/ 本篇博文已经迁移,阅读全文 ...

  6. Python开发【第四章】:Python函数剖析

    一.Python函数剖析 1.函数的调用顺序 #!/usr/bin/env python # -*- coding:utf-8 -*- #-Author-Lian #函数错误的调用方式 def fun ...

  7. Python函数解析

    对于Python的函数,我们需要记住的是: 1. 函数的默认返回值是None. 2. python是一个自上而下逐行解释并执行的语言.因此,函数的定义必须在函数被调用之前.同名的函数,后定义的会覆盖前 ...

  8. Python入门笔记(18):Python函数(1):基础部分

    一.什么是函数.方法.过程 推荐阅读:http://www.cnblogs.com/snandy/archive/2011/08/29/2153871.html 一般程序设计语言包含两种基本的抽象:过 ...

  9. Python函数1

    Python 函数命令的使用 想想我们之前数学中学到的函数,首先我们需要定义一个函数,例如f(x)=x, 当x输入任意数的时候,f(x)都能输出和x相等的数值. 那么在Python中是如何实现的呢? ...

  10. python函数传参是传值还是传引用?

    首先还是应该科普下函数参数传递机制,传值和传引用是什么意思? 函数参数传递机制问题在本质上是调用函数(过程)和被调用函数(过程)在调用发生时进行通信的方法问题.基本的参数传递机制有两种:值传递和引用传 ...

随机推荐

  1. select简单示例,有注释

    全部都在代码中: import select import socket import queue """ 简单的select 实现echo server 个人理解: s ...

  2. Root用户让其他用户运行某程序

    这里以启动tomcat为例 1.安装tomcat不介绍了,自己百度 2.测试能否使用,略 3.创建tomcat用户 useradd tomcat -s /sbin/nologin 创建tomcat,禁 ...

  3. ORACLE 查询被锁定表及解锁释放session的方法

    后台数据库操作某个表时处于假死状态,可能该表被某个用户锁定,导致其他用户无法继续操作, 如下是解决方案和实例. 查被锁的表,以及用户 SELECT object_name, machine, s.si ...

  4. 【卷土重来之C#学习笔记】(一)c#文章导航目录

    [卷土重来之C#学习笔记](一)c#文章导航目录 [卷土重来之C#学习笔记](二)c#编程概述 [卷土重来之C#学习笔记](三)类型.存储.对象 [卷土重来之C#学习笔记](四)类的基本概念 [卷土重 ...

  5. WPF中嵌入Skyline提供的COM组件填坑

    网上有很多关于在WPF中使用的Skyline提供的COM组件的教程,但大都雷同一律,其中很多的细节均为涉及,本文意在在其原基础上进行一些细节的补充. 工具:Visual Studio 2017 1.  ...

  6. 《Unity系列》Json文件格式的解析——初级教程

    Json作为轻量级的数据交换格式,被广泛应用于网络数据传输中.相关的解析工具层出不穷,一般掌握一个工具的应用其他的相应工具就能立马学会. 这里以C#中的LitJson为例给大家示范一下解析工具的用法. ...

  7. (三)HTML中的列表标签、框架集及表单标签

    一.HTML的列表标签 在网页中,经常可以看到,有的内容排列如同word里面的项目编号,这就是HTML的无序排列和有序排列起到的作用.. HTML之无序排列:<ul></ul> ...

  8. springboot从入门到精通(二)

    这一节我们一起用springboot开发一个应用程序,应用程序里的核心概念是玩家获取英雄列表上的英雄信息. 1.定义实体模型: 代码如下: package com.dota.herolist.enti ...

  9. SGI STL红黑树中迭代器的边界值分析

    前言 一段程序最容易出错的就是在判断或者是情况分类的边界地方,所以,应该对于许多判断或者是情况分类的边界要格外的注意.下面,就分析下STL中红黑树的迭代器的各种边界情况.(注意:分析中STL使用的版本 ...

  10. 采用 ITextPDF 类库测试向 PDF 中加入图片的示例

    package com.smbea.image; import com.artup.util.image.ImageUtil; import com.itextpdf.text.*; import c ...