5.1函数基本语法

# 函数语法格式

def 函数名(形参列表):
"""""函数的说明文档"
//由零条或多条可执行语句组成的函数
[return [返回值]] 详细说明:
1.函数名建议由一个或多个有意义的单词连缀而成,每个单词的字母全部小写,单词间用_分隔
对于返回多个值的情况:可将多个值包装成列表后返回,也可直接返回多个值(python会自动将多个返回值封装成元组)
2.函数的返回值可以是一个值、多个值或者为表达式
3.函数声明之后、函数体之前的部分,视为函数的说明文档,可通过函数名.__doc__查看

函数定义

def sum_and_avg(list):
sum = 0
count = 0
for e in list:
# 如果元素e是数值
if isinstance(e, int) or isinstance(e, float):
count += 1
sum += e
return sum, sum / count
my_list = [20 , 15 , 2.8,'a', 35 , 5.9, -1.8]
tp = sum_and_avg(my_list)
print(tp) # 返回结果是元组
s, avg = sum_and_avg(my_list) # 可以使用多个变量接受函数返回的多个值(序列解包)
print(s)
print(avg)
输出结果:
(76.9, 12.816666666666668)
76.9
12.816666666666668

多个返回值

5.2函数参数

位置参数:根据位置传入参数

关键字参数:根据参数名来传入参数

def girth(width, height):
print("width:", width)
print("height:", height)
return 2 * (width + height) print(girth(3.5, 4.8)) # 位置参数
print(girth(width=3.5, height=4.8)) # 关键字参数
print(girth(height=4.8, width=3.5)) # 关键字参数
print(girth(3.5, height=4.8)) # 调用函数时混合使用关键字参数和位置参数,则关键字参数必须位于位置参数之后

参数默认值:

"""
参数默认值:
在某些情况下,程序需要在定义函数时为一个或多个形参指定默认值-这样在调用函数时就可以省略为该形参传入参数值,而是直接使用该形参的默认值
""" def say_hi(name='孙悟空', message="欢迎来到疯狂软件"):
print(name, ",您好")
print("消息是:", message) say_hi() # 全部使用默认值
say_hi("白骨精")
say_hi("白骨精", "欢迎学习python")
say_hi(message="欢迎学习python")
say_hi('白骨精', message="欢迎学习python") # 调用函数时关键字参数必须位于位置参数的后面 输出结果:
孙悟空 ,您好
消息是: 欢迎来到疯狂软件
白骨精 ,您好
消息是: 欢迎来到疯狂软件
白骨精 ,您好
消息是: 欢迎学习python
孙悟空 ,您好
消息是: 欢迎学习python
白骨精 ,您好
消息是: 欢迎学习python

可变参数   *变量名 :可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple

"""形参前加个*意味着该参数可以接收多个参数值,多个参数值被当作元组传入"""
def test(*nums):
for i in nums:
print(i) aa = [1, 2]
print('------')
test(aa) # 不加*的话会被当做一个参数
print('------')
test(*aa)
print('------')
test(3, 4)
输出结果:
------
[1, 2]
------
1
2
------
3
4
版本
函数定义
调用
说明
不使用可变参数
def calc(numbers):
sum = 0
for n in numbers:
sum = sum + n * n
return sum
calc([1, 2, 3])
调用的时候,需要先组装出一个list或tuple
使用可变参数
def calc(*numbers):
sum = 0
for n in numbers:
sum = sum + n * n
return sum
calc(1, 2)
如果已经有一个list需要调用
方法一:(此方法太繁琐)
>>> nums = [1, 2, 3]
>>> calc(nums[0], nums[1], nums[2])
方法二:
>>> nums = [1, 2, 3]
>>> calc(*nums)
14
 
关键字参数 **kw
关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict
def person(name, age, **kw):
print('name:', name, 'age:', age, 'other:', kw) person('Michael', 30)
person('Bob', 35, city='Beijing')
person('Adam', 45, gender='M', job='Engineer') extra = {'city': 'Beijing', 'job': 'Engineer'}
person('Jack', 24, city=extra['city'], job=extra['job']) # 可以先组装出一个dict,然后,把该dict转换为关键字参数传进去 extra = {'city': 'Beijing', 'job': 'Engineer'} # 简化一下
person('Jack', 24, **extra) outputs:
name: Michael age: 30 other: {}
name: Bob age: 35 other: {'city': 'Beijing'}
name: Adam age: 45 other: {'gender': 'M', 'job': 'Engineer'}
name: Jack age: 24 other: {'city': 'Beijing', 'job': 'Engineer'}
name: Jack age: 24 other: {'city': 'Beijing', 'job': 'Engineer'}

函数参数的传递机制:

5.4函数的高级内容

python学习-函数和lambda表达式(五)的更多相关文章

  1. Python学习笔记:lambda表达式

    lambda表达式:通常是在需要一个函数,但又不想去命名一个函数的时候使用,即匿名函数. 示例如下: add = lambda x,y : x+ y add(1,2) # 结果为3 1.应用在函数式编 ...

  2. python函数,lambda表达式,三目运算,列表解析,递归

    一.自定义函数 定义函数时,函数体不执行:只有在调用函数时,函数体才执行.函数的结构: 1. def 2. 函数名 3. 函数体 def func_name(): 函数体 4. 返回值 如果没有声明返 ...

  3. Python内嵌函数与Lambda表达式

    //2018.10.29 内嵌函数与lambda 表达式 1.如果在内嵌函数中需要改变全局变量的时候需要用到global语句对于变 量进行一定的说明与定义 2.内部的嵌套函数不可以直接在外部进行访问 ...

  4. [C#学习教程-委托]001.大道至简之委托(代理),匿名函数,Lambda表达式

    引言:此文翻译自CodeProject上的同名文章<C# Delegates,Anonymous Methods, and Lambda Expressions>,在此一起Mark一下,此 ...

  5. 浅析匿名函数、lambda表达式、闭包(closure)区别与作用

    浅析匿名函数.lambda表达式.闭包(closure)区别与作用 所有的主流编程语言都对函数式编程有支持,比如c++11.python和java中有lambda表达式.lua和JavaScript中 ...

  6. python3 入门 (三) 函数与lambda表达式、闭包

    函数 是组织好的.可重复使用的.用来实现单一或相关联功能的代码段. 函数代码块以def关键词开头,后接函数标识符名称和圆括号() 任何传入参数和自变量必须放在圆括号中间.圆括号之间可以用于定义参数 函 ...

  7. Python函数式编程之lambda表达式

    一:匿名函数的定义 lambda parameter_list: expression 二:三元表达式 条件为真时返回的结果 if 条件判断 else 条件为假的时候返回的结果 三:map map(f ...

  8. 委托,匿名函数和lambda表达式

    很早之前就接触到了委托,但是一直对他用的不是太多,主要是本人是菜鸟,能写的比较高级的代码确实不多,但是最近在看MSDN微软的类库的时候,发现了微软的类库好多都用到了委托,于是决定好好的研究研究,加深一 ...

  9. Kotlin语法(函数和lambda表达式)

    三.函数和lambda表达式 1. 函数声明 fun double(x: Int): Int { } 函数参数是用 Pascal 符号定义的 name:type.参数之间用逗号隔开,每个参数必须指明类 ...

随机推荐

  1. Cabloy-CMS:动静结合,解决Hexo痛点问题(进阶篇)

    前言 前一篇文章 介绍了如何通过Cabloy-CMS快速搭建一个博客站点. 这里简单介绍Cabloy-CMS静态站点的渲染机制,更多详细的内容请参见https://cms.cabloy.com 渲染规 ...

  2. Hadoop 之 MapReduce原理

    1.什么是MapReduce 答:简而言之,就是将一个大任务分成多个小的子任务(Map),并行执行后,合并结果(Reduce).下面举一个纸牌得栗子  2.MapReduce的运行流程  3.JobT ...

  3. [LeetCode] 面试题之犄角旮旯 第叁章

    题库:LeetCode题库 - 中等难度 习题:网友收集 - zhizhiyu 此处应为一个简单的核心总结,以及练习笔记. 查找一个数“在不在”?桶排序理论上貌似不错. 回文问题 ----> [ ...

  4. BCD 码、Gray 码、ASCII 码都是什么呢?

    BCD 码:即(Binary Coded Decimal)码,也称为 8421 码,是十进制代码中最常见的一种.每一位的 1 代表的十进制数称为这一位的权.BCD 码中每一位的权都是固定不变的,它属于 ...

  5. 讨厌的Permission denied:adb访问手机目录时,怎么处理Permission denied问题

    故事背景 手机某app出现了无响应,我想找到手机anr日志 但我只知道在data目录的某个目录里有个tra**的文件里有anr日志 具体的我真忘了,所以想要进入data中用ls查看一下 结果就出现了讨 ...

  6. 工厂模式(整理自李建忠<C++设计模式>视频)

    整理自李建忠<C++设计模式>视频 一.导入:"对象创建"模式和工厂模式 工厂模式只是该模式下的一种. 二.举例说明 有这样一个场景:需要在MainForm中设计一个按 ...

  7. Redis数据库安装与配置调试

    主要培养自我对Redis数据库安装能力, 并且进行个性化的数据库配置.掌握本实验的重点,即在于数据库的安装与启动参数的配置.同时,理解NOSQL数据库的体系结构. ①下载Redis安装包进行数据库平台 ...

  8. 【django】分页

    分页 1.简单分页 from django.conf.urls import url from django.contrib import admin from app01 import views ...

  9. Spring boot 官网学习笔记 - Spring Boot CLI 入门案例

    安装CLI https://repo.spring.io/release/org/springframework/boot/spring-boot-cli/2.1.1.RELEASE/spring-b ...

  10. 如何免费使用GPU跑深度学习代码

    从事深度学习的研究者都知道,深度学习代码需要设计海量的数据,需要很大很大很大(重要的事情说三遍)的计算量,以至于CPU算不过来,需要通过GPU帮忙,但这必不意味着CPU的性能没GPU强,CPU是那种综 ...