python学习-函数和lambda表达式(五)
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
|
- 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表达式(五)的更多相关文章
- Python学习笔记:lambda表达式
lambda表达式:通常是在需要一个函数,但又不想去命名一个函数的时候使用,即匿名函数. 示例如下: add = lambda x,y : x+ y add(1,2) # 结果为3 1.应用在函数式编 ...
- python函数,lambda表达式,三目运算,列表解析,递归
一.自定义函数 定义函数时,函数体不执行:只有在调用函数时,函数体才执行.函数的结构: 1. def 2. 函数名 3. 函数体 def func_name(): 函数体 4. 返回值 如果没有声明返 ...
- Python内嵌函数与Lambda表达式
//2018.10.29 内嵌函数与lambda 表达式 1.如果在内嵌函数中需要改变全局变量的时候需要用到global语句对于变 量进行一定的说明与定义 2.内部的嵌套函数不可以直接在外部进行访问 ...
- [C#学习教程-委托]001.大道至简之委托(代理),匿名函数,Lambda表达式
引言:此文翻译自CodeProject上的同名文章<C# Delegates,Anonymous Methods, and Lambda Expressions>,在此一起Mark一下,此 ...
- 浅析匿名函数、lambda表达式、闭包(closure)区别与作用
浅析匿名函数.lambda表达式.闭包(closure)区别与作用 所有的主流编程语言都对函数式编程有支持,比如c++11.python和java中有lambda表达式.lua和JavaScript中 ...
- python3 入门 (三) 函数与lambda表达式、闭包
函数 是组织好的.可重复使用的.用来实现单一或相关联功能的代码段. 函数代码块以def关键词开头,后接函数标识符名称和圆括号() 任何传入参数和自变量必须放在圆括号中间.圆括号之间可以用于定义参数 函 ...
- Python函数式编程之lambda表达式
一:匿名函数的定义 lambda parameter_list: expression 二:三元表达式 条件为真时返回的结果 if 条件判断 else 条件为假的时候返回的结果 三:map map(f ...
- 委托,匿名函数和lambda表达式
很早之前就接触到了委托,但是一直对他用的不是太多,主要是本人是菜鸟,能写的比较高级的代码确实不多,但是最近在看MSDN微软的类库的时候,发现了微软的类库好多都用到了委托,于是决定好好的研究研究,加深一 ...
- Kotlin语法(函数和lambda表达式)
三.函数和lambda表达式 1. 函数声明 fun double(x: Int): Int { } 函数参数是用 Pascal 符号定义的 name:type.参数之间用逗号隔开,每个参数必须指明类 ...
随机推荐
- CentOS 7安装后的一些工作记录
安装net-tools: yum install -y net-tools 安装epel源 yum install epel-release 安装fail2ban yum install fail2b ...
- 18 (OC)* RunTime
目录: 一.怎么理解OC是动态语言,Runtime又是什么?二.理解消息机制的基本原理三.与Runtime交互的三种方式四.分析Runtime中的数据结构五.深入理解Rutime消息发送原理六.多继承 ...
- 混合事务分析处理“HTAP”的技术要点分析
HTAP是近些年来比较火的一个概念,本文将聊聊HTAP的前世今生及技术特点. 一.数据应用类别 根据数据的使用特征,可简单做如下划分.在选择技术平台之前,我们需要做好这样的定位. 1.1 OLTP 联 ...
- windows下使用zkui
一,前言 使用zkui可以很方便的查看操作zookeeper 二,从源代码生成可执行jar zkui在github上的地址:https://github.com/DeemOpen/zkui 使用ide ...
- 第八届蓝桥杯java b组第一题
1,标题: 购物单 小明刚刚找到工作,老板人很好,只是老板夫人很爱购物.老板忙的时候经常让小明帮忙到商场代为购物.小明很厌烦,但又不好推辞. 这不,XX大促销又来了!老板夫人开出了长长的购 ...
- Zuhair and Strings-祖海和字符串 CodeForce#1105B
题目链接:Zuhair and Strings 题目原文 Given a string
- Java假期样卷 简易通讯录
score.java package score; public class score { String name; String num; int age; boolean sex; double ...
- selenium介绍及环境安装
selenium简介: seelenium是web应用程序自动化工具,通过自动操作浏览器,进行点击.输入.回车.返回等来模拟用户的真实行为.如何理解和看待selenium项目,selenium官方 ...
- API离线查看工具【包括!!所用常用!!开发语言的API】
我相信对于每一个开发人员来说,都是不喜欢死记硬背API的,一些常用的方法或者接口我们是可以直接信手捏来的,或者说直接使用开发工具的自动代码提示,也能很快的找到自己想用的API,如果是自己从未使用过的, ...
- 异步Promise及Async/Await最完整入门攻略
一.为什么有Async/Await? 我们都知道已经有了Promise的解决方案了,为什么还要ES7提出新的Async/Await标准呢? 答案其实也显而易见:Promise虽然跳出了异步嵌套的怪圈, ...