当前位置: 首页 > news >正文

Python 函数参数

#!/usr/bin/env python
#--- coding: utf-8 ---
"""
定义函数的时候,我们把参数的名字和位置确定下来,函数的接口定义就完成了。
对于函数的调用者来说,只需要知道如何传递正确的参数,以及函数将返回什么样的值就够了,
函数内部的复杂逻辑被封装起来,调用者无需了解。

Python的函数定义非常简单,但灵活度却非常大。除了正常定义的必选参数外,还可以使用默认参数、
可变参数和关键字参数,使得函数定义出来的接口,不但能处理复杂的参数,还可以简化调用者的代码。
"""
#python function experiment.


#eg.
def power(x, n=2):
    s = 1
    while n > 0:
        n = n - 1
        s = s * x
    return s
"""
设置默认参数时,有几点要注意:

一是必选参数在前,默认参数在后,否则Python的解释器会报错(思考一下为什么默认参数不能放在必选参数前面);

二是如何设置默认参数。

当函数有多个参数时,把变化大的参数放前面,变化小的参数放后面。变化小的参数就可以作为默认参数。

使用默认参数有什么好处?最大的好处是能降低调用函数的难度。
"""
def enroll(name, gender, age=6, city='Beijing'):
    print 'name:', name
    print 'gender:', gender
    print 'age:', age
    print 'city:', city
enroll('Bob', 'M', 7)
enroll('Adam', 'M', city='Tianjin')
"""
定义默认参数要牢记一点:默认参数必须指向不变对象
"""
#可变参数 variable parameter
def calc(*numbers):
    sum = 0
    for n in numbers:
        sum = sum + n * n
    return sum
"""
定义可变参数和定义list或tuple参数相比,仅仅在参数前面加了一个*号。在函数内部
,参数numbers接收到的是一个tuple,因此,函数代码完全不变。
但是,调用该函数时,可以传入任意个参数,包括0个参数
"""
#关键字参数
def person(name, age, **kw):
    print 'name:', name, 'age:', age, 'other:', kw
"""
函数person除了必选参数name和age外,还接受关键字参数kw。在调用该函数时,
可以只传入必选参数:
"""
person('Michael', 30)
#也可以传入任意个数的关键字参数:
person('Adam', 45, gender='M', job='Engineer')
person('Bob', 35, city='Beijing')
#参数组合
"""
在Python中定义函数,可以用必选参数、默认参数、可变参数和关键字参数,这4种参数都可以一起
使用,或者只用其中某些,但是请注意,参数定义的顺序必须是:
必选参数、默认参数、可变参数和关键字参数。
"""
"""
Python3Syntax:
命名关键字参数
对于关键字参数,函数的调用者可以传入任意不受限制的关键字参数。
至于到底传入了哪些,就需要在函数内部通过kw检查。
def person(name, age, **kw):
    if 'city' in kw:
        # 有city参数
        pass
    if 'job' in kw:
        # 有job参数
        pass
    print('name:', name, 'age:', age, 'other:', kw)
但是调用者仍可以传入不受限制的关键字参数:
>>> person('Jack', 24, city='Beijing', addr='Chaoyang', zipcode=123456)
如果要限制关键字参数的名字,就可以用命名关键字参数,例如,
只接收city和job作为关键字参数。这种方式定义的函数如下:
def person(name, age, *, city, job):
    print(name, age, city, job)
>>> person('Jack', 24, city='Beijing', job='Engineer')
如果函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不再需要一个特殊分隔符*了:
def person(name, age, *args, city, job):
    print(name, age, args, city, job)
命名关键字参数必须传入参数名,这和位置参数不同。如果没有传入参数名,调用将报错.
"""

相关文章:

  • Python高级特性之切片
  • Python 模块
  • Python 简易TCP客户端
  • Python 简易UDP客户端/服务端
  • Python TCP 服务端
  • python socket编程详细介绍
  • 关于ctrl组合键,你知道多少?
  • [python开发模拟netcat工具] BHPnet
  • 算法讲解之Dynamic Programing —— 区间DP [变形:环形DP]
  • codevs 3304 水果姐逛水果街Ⅰ 题解
  • 算法讲解之Dynamic Programing —— 背包DP [资源分配问题]
  • [CDOJ 838]母仪天下 【线段树手速练习 15分钟内敲完算合格】
  • Lonlife-ACM 1014 - Absolute Defeat [差分]
  • [转]ACM 取石子问题
  • 浅谈CSRF攻击方式
  • [译]如何构建服务器端web组件,为何要构建?
  • 【跃迁之路】【444天】程序员高效学习方法论探索系列(实验阶段201-2018.04.25)...
  • 2017 年终总结 —— 在路上
  • 30天自制操作系统-2
  • ES6简单总结(搭配简单的讲解和小案例)
  • iOS 系统授权开发
  • Laravel Mix运行时关于es2015报错解决方案
  • SpringCloud(第 039 篇)链接Mysql数据库,通过JpaRepository编写数据库访问
  • Spring声明式事务管理之一:五大属性分析
  • Vue官网教程学习过程中值得记录的一些事情
  • 持续集成与持续部署宝典Part 2:创建持续集成流水线
  • 短视频宝贝=慢?阿里巴巴工程师这样秒开短视频
  • 如何设计一个微型分布式架构?
  • 少走弯路,给Java 1~5 年程序员的建议
  • 深度学习中的信息论知识详解
  • 使用docker-compose进行多节点部署
  • 思维导图—你不知道的JavaScript中卷
  • 吴恩达Deep Learning课程练习题参考答案——R语言版
  • 一个SAP顾问在美国的这些年
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • 译自由幺半群
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • Linux权限管理(week1_day5)--技术流ken
  • Semaphore
  • ​ArcGIS Pro 如何批量删除字段
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • #Linux(Source Insight安装及工程建立)
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • (C++)八皇后问题
  • (k8s中)docker netty OOM问题记录
  • (超详细)2-YOLOV5改进-添加SimAM注意力机制
  • (二)windows配置JDK环境
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (转)平衡树
  • (转)清华学霸演讲稿:永远不要说你已经尽力了
  • **PHP二维数组遍历时同时赋值
  • .bat批处理(五):遍历指定目录下资源文件并更新
  • .net core webapi 大文件上传到wwwroot文件夹
  • .NET Core 版本不支持的问题