一、函数的参数

我们在定义函数时,可以定义形式参数(简称形参),这些形参的值在函数调用的时候才会确定,形参的值由调用者负责传入。

1、关键字参数

在Python中,函数的参数名并不是没有意义的,在调用函数的时候,Python允许根据参数名传入参数值,根据参数名传入参数值不需要遵守定义形参的顺序,这种根据参数名传入参数值的方式被称为关键字参数。

例:

def test(a,b,c):
print ('a:%s,b:%s,c:%s'%(a,b,c))
return a,b,c test(c = 1,a = 2,b =3)
# 运行结果:
# a:2,b:3,c:1
# (2, 3, 1) test(1,2,3)
# 运行结果:
# a:1,b:2,c:3
# (1, 2, 3) # 位置参数与关键字参数混合使用,位置参数必须要在关键字参数前,而关键字参数后面只能是关键字参数,否则将会报错
test(1,b = 2 ,3)
# SyntaxError: positional argument follows keyword argument

2、参数默认值

我们可以在定义函数时,为一个或多个形参传入默认值,当函数被调用时,就不需要再为该形参传值。

例:

# 定义函数时,位置参数必须在关键字参数前面
def return_number(a = 1,b = 2,c):
return a,b,c # 报错 SyntaxError: non-default argument follows default argument def return_number(a,b = 2,c = 3):
return a,b,c return_number(1)
# 返回 (1, 2, 3)

3、个数可变的参数

当我们定义一个函数时,形参个数是可变的,这时候我们可在形参前添加一个星号(*),这样多个参数值就会被当成元组传入,Python一个函数最多只能带一个支持“普通”参数收集的参数和一个支持关键字参数收集的参数(形参前添加两个星号)。

“普通”参数收集参数,例:

def show_book(name,*books):
book_list = list(books)
print ('%s发书啦!发放书列表:%s'%(name,book_list)) show_book('小明','语文','数学','英语')
# 打印 小明发书啦!发放书列表:['语文', '数学', '英语'] def receive_book(*name,book):
for i in name:
print ('%s领取了%s!'%(i,book)) receive_book('小明','小红','小蓝',book = '英语')
# 打印
# 小明领取了英语!
# 小红领取了英语!
# 小蓝领取了英语!

  

关键字参数收集参数,会被收集成字典传入,例:

def receive_book(issue,**receive):
for name,book in receive.items():
print ('%s发放书籍,%s领取了%s书'%(issue,name,book)) receive_book('老王',小明 = '语文',小红 = '英语',小黑 = '数学')
# 打印
# 老王发放书籍,小明领取了语文书
# 老王发放书籍,小红领取了英语书
# 老王发放书籍,小黑领取了数学书

“普通”参数收集形参和关键字参数收集参数混合使用,例:

def receive_book(*issue,**receive):
for name,book in receive.items():
for i in issue:
print ('%s发放书籍,%s领取了%s书'%(i,name,book)) receive_book('老王','老吴','老洪',小明 = '语文',小红 = '英语',小黑 = '数学')
# 打印
# 老王发放书籍,小明领取了语文书
# 老吴发放书籍,小明领取了语文书
# 老洪发放书籍,小明领取了语文书
# 老王发放书籍,小红领取了英语书
# 老吴发放书籍,小红领取了英语书
# 老洪发放书籍,小红领取了英语书
# 老王发放书籍,小黑领取了数学书
# 老吴发放书籍,小黑领取了数学书
# 老洪发放书籍,小黑领取了数学书

4、逆向参数收集

逆向参数收集,指在程序已有的列表、元组、字典等对象的前提下,把他们的元素‘拆开’后传给函数的参数,逆向收集需要在传入的列表、元组参数之前加一个星号,字典需要在参数之前加两个星号。

传入列表、元组,例:

def show(one,*nums):
print ('one = %s'%one)
print ('nums = ',nums) # 传入列表
num = [2,3,4]
# 使用逆向参数收集
show(1,*num)
# 打印
# one = 1
# nums = (2, 3, 4) show(1,num)
# 打印
# one = 1
# nums = ([2, 3, 4],) # 传入元组
n = (2,3,4)
# 使用逆向参数收集
show(1,*n)
# 打印
# one = 1
# nums = (2, 3, 4) show(1,n)
# 打印
# one = 1
# nums = ((2, 3, 4),)

  

传入字典,例:

def receive_book(issue,name,book):
print ('%s发放书籍,%s领取了%s书'%(issue,name,book)) my_dict = dict(issue = '老王',name = '小熊',book = '英文')
receive_book(**my_dict)
# 打印
# 老王发放书籍,小熊领取了英文书

同时传入字典、列表,例:

def receive_book(*issue,name,book):
for i in issue:
print ('%s发放书籍,%s领取了%s书'%(i,name,book)) my_dict = dict(name = '小熊',book = '英文')
issue_list = ['老王','老吴']
receive_book(*issue_list,**my_dict)
# 打印
# 老王发放书籍,小熊领取了英文书
# 老吴发放书籍,小熊领取了英文书

Python——函数入门(二)的更多相关文章

  1. python函数(二)

    python函数(二) 变量的作用域 1.局部变量与全局变量 在函数内创建的变量被称为局部变量,这类变量的生命周期与函数相同,当函数执行完毕时,变量也就随之消失. 此类变量只能在函数内部调用,函数外不 ...

  2. 2.Python爬虫入门二之爬虫基础了解

    1.什么是爬虫 爬虫,即网络爬虫,大家可以理解为在网络上爬行的一直蜘蛛,互联网就比作一张大网,而爬虫便是在这张网上爬来爬去的蜘蛛咯,如果它遇到资源,那么它就会抓取下来.想抓取什么?这个由你来控制它咯. ...

  3. Python爬虫入门二之爬虫基础了解

    1.什么是爬虫 爬虫,即网络爬虫,大家可以理解为在网络上爬行的一直蜘蛛,互联网就比作一张大网,而爬虫便是在这张网上爬来爬去的蜘蛛咯,如果它遇到资源,那么它就会抓取下来.想抓取什么?这个由你来控制它咯. ...

  4. 转 Python爬虫入门二之爬虫基础了解

    静觅 » Python爬虫入门二之爬虫基础了解 2.浏览网页的过程 在用户浏览网页的过程中,我们可能会看到许多好看的图片,比如 http://image.baidu.com/ ,我们会看到几张的图片以 ...

  5. Python 爬虫入门(二)——爬取妹子图

    Python 爬虫入门 听说你写代码没动力?本文就给你动力,爬取妹子图.如果这也没动力那就没救了. GitHub 地址: https://github.com/injetlee/Python/blob ...

  6. RobotFramework + Python 自动化入门 二 (关键字)

    在<RobotFramwork + Python 自动化入门 一>中,完成了Robot环境搭建及测试脚本的创建和执行. 本节,对RobotFramework的关键字使用和查看源码进行介绍. ...

  7. Python函数(入门6)

    转载请标明出处: http://www.cnblogs.com/why168888/p/6407970.html 本文出自:[Edwin博客园] Python函数 1. Python之调用函数 pri ...

  8. 《转》Python学习(19)-python函数(二)-关于lambda

    转自http://www.cnblogs.com/BeginMan/p/3178103.html 一.lambda函数 1.lambda函数基础: lambda函数也叫匿名函数,即,函数没有具体的名称 ...

  9. python函数入门

    知识内容: 1.函数的作用 2.函数的定义与调用 3.函数的返回值 4.函数的参数 5.局部变量与全局变量 6.作用域 一.函数的作用 1.复用代码 将可能重复执行的代码封装成函数,并在需要执行的地方 ...

随机推荐

  1. 移动端专用css

    通过设置css属性 -webkit-tap-highlight-color: rgba(0, 0, 0, 0);取消掉手机端webkit浏览器 点击按钮或超链接之类的 默认灰色背景色 设置css属性 ...

  2. 移动端tab目录(有待完善)

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...

  3. Windows CreateEvent,SetEvent,WaitForSingleObject的用法

    http://blog.pfan.cn/embed/19089.html WaitForSingleObject的用法 DWORD WaitForSingleObject(   HANDLE hHan ...

  4. cogs 721. [SDOI2007] 线性方程组

    721. [SDOI2007] 线性方程组 ★★   输入文件:gaess.in   输出文件:gaess.out   简单对比时间限制:1 s   内存限制:128 MB [问题描述] 已知 n 元 ...

  5. 关于java多线程任务执行时共享资源加锁的方式思考

    1.加锁方式: 1-1.使用synchronized关键字进行方法或代码块的加锁方式 1-2.使用ReentrantLock类提供的lock()方法的方式 2.代码实现(传统的银行取款存款问题): 2 ...

  6. javascript中的style只能取到在HTML中定义的css属性

    如果在css中定义的 li{ width:100px; left:100px; top:; position:absolute; font-style:normal; } 这样执行: oli[0].s ...

  7. Codeforces #564div2 C(模拟)

    要点 没想到的一点是,对于堆里的某牌,最好情况是它出来时后边都准备就绪了,答案是\(p[i] + (n - i + 1)\),所有的这个取最大的即可 一发结束的情况先特判一下 const int ma ...

  8. Centos7.2内网环境安装MySQL5.7.24

    1.配置本地yum源 内网环境,首先需要配置本地yum源,以解决MySQL的依赖安装,具体参考该文:点击打开 2.查看服务器环境 uname -a 3.去官网下载MySQL安装包 MySQL官网网址: ...

  9. 译:Java 中的正则表达式性能概述

    原文链接:https://www.baeldung.com/java-regex-performance 作者: baeldung 译者:Darren Luo 1. 概述 在本快速教程中,我们将展示模 ...

  10. JS中实现JSON对象和JSON字符串之间的相互转换

    对于主流的浏览器(比如:firefox,chrome,opera,safari,ie8+),浏览器自己提供了JSON对象,其中的parse和stringify方法实现了JSON对象和JSON字符串之间 ...