前言

上一篇主要介绍了Python函数的参数类型,本篇继续学习Python函数多类型传值。

目录

软件环境

  • 系统

    • UbuntuKylin 14.04
  • 软件
    • Python 2.7.4
    • IPython 4.0.0

参数的多类型传值

一般而言,形参和实参的数量要一致。但是当实参为序列数据类型时,我们可以将多个实参传递到形参中。

我们可以在实参列表中以 * 或者 ** 标识符来限制传入的实参必须为 Tuple/List 或 Dict 的类型对象。

向函数传递Tuple

其实不定长参数本质是将冗余的实参转换为Tuple数据类型后再传递给函数。下面的例子传递了一个Tuple类型实参给函数,和使用不定长参数效果是一样的。需要注意的是,不定长参数需要放到函数形参列表的后端,而Tuple类型形参可以随意放置。

  1. In [33]: %pycat func1Test.py
  2. #!/usr/bin/env python
  3. #Filename:func1Test.py
  4. import sys
  5. def printYourEnter(input1,input2):
  6. print input1
  7. print input2
  8. for var in input2:
  9. print var
  10. if __name__ == '__main__':
  11. enter1 = raw_input("Ple enter your living cities:")
  12. enter2 = raw_input("ple enter your name:")
  13. enter3 = raw_input("Ple enter your age:")
  14. tuple1 = (enter2,enter3)
  15. printYourEnter(enter1,tuple1) # 这里没有限制实参类型,可以传入任意类型对象
  16. In [34]: run func1Test.py
  17. Ple enter your living cities:BJ
  18. ple enter your name:Jmilk
  19. Ple enter your age:23
  20. BJ
  21. ('Jmilk', '23')
  22. Jmilk
  23. 23

注意:向函数传度Tuple还有一种形式:

  1. In [91]: %pycat tupleTest.py
  2. #!/usr/bin/env python
  3. #Filename:tupleTest.py
  4. def test(x,y):
  5. print x*y
  6. if __name__ == '__main__':
  7. t = (2,3)
  8. test(*t) # 限制只能传入 Tuple 类型对象
  9. In [92]: run tupleTest.py
  10. 6

在调用函数的时候,使用 * 标识符:标识将 t 元组中的元素以迭代的方式传递给形参。但是这种时候要求元组元素的个数与形参的个数要一致。

向函数传递List

向函数传递List类型对象,与传递Tuple类型对象类似。

  1. In [61]: %pycat func1Test.py
  2. #!/usr/bin/env python
  3. #Filename:func1Test.py
  4. def printYourEnter(input1,x,y):
  5. print input1
  6. print x
  7. print y
  8. if __name__ == '__main__':
  9. enter1 = raw_input("Ple enter your living cities:")
  10. enter2 = raw_input("ple enter your name:")
  11. enter3 = int(raw_input("Ple enter your age:"))
  12. li1 = [enter2,enter3]
  13. printYourEnter(enter1,*li1)
  14. In [62]: run func1Test.py
  15. Ple enter your living cities:BJ
  16. ple enter your name:Jmilk
  17. Ple enter your age:23
  18. BJ
  19. Jmilk
  20. 23

向函数传递Dictionary

想函数传递Dic数据类型需要注意下面几点:

1.形参名与dic中的key相同,形参会自左往右的匹配第一个与自己同名的key,并将此key映射的value传递到形参。

2.若有形参在dic中并没有找到匹配的key,则会报错。

3.若dic中有多个同名的key,则自右往左的优先级来匹配。

4.形参与dic的key:value顺序无关。

注意:若dic中有key不能与形参匹配时,需要人为的指定dic中key给形参,并传递其value给形参,否则会报错。本质是将dic中的value值先取出来再传递到函数形参

  1. functionName(dic[x][,...])

Example:

  1. In [45]: %pycat func1Test.py
  2. #!/usr/bin/env python
  3. #Filename:func1Test.py
  4. def printYourEnter(input1,cities,name,age):
  5. print input1
  6. print cities
  7. print name
  8. print age
  9. if __name__ == '__main__':
  10. enter1 = raw_input("Ple enter your living cities:")
  11. enter2 = raw_input("ple enter your name:")
  12. enter3 = int(raw_input("Ple enter your age:"))
  13. dic = {'cities':enter1,'name':enter2,'age':enter3}
  14. printYourEnter('a',**dic)
  15. In [46]: run func1Test.py
  16. Ple enter your living cities:BJ
  17. ple enter your name:Jmilk
  18. Ple enter your age:23
  19. a
  20. BJ
  21. Jmilk
  22. 23

当限制向函数传递一个dic数据类型时,在调用函数时要使用 ** 来标识是一个映射,即传递一个字典类型的对象。而且在函数定义时,函数的形参必须与字典的Key一致,才可以实现将字典的value传递给函数中对应的形参。

也可以写成下面这种形式:

  1. In [49]: %pycat func1Test.py
  2. #!/usr/bin/env python
  3. #Filename:func1Test.py
  4. def printYourEnter(input1,dic):
  5. print input1
  6. print dic['cities']
  7. print dic['name']
  8. print dic['age']
  9. if __name__ == '__main__':
  10. enter1 = raw_input("Ple enter your living cities:")
  11. enter2 = raw_input("ple enter your name:")
  12. enter3 = int(raw_input("Ple enter your age:"))
  13. dic = {'cities':enter1,'name':enter2,'age':enter3}
  14. printYourEnter('a',dic)
  15. In [50]: run func1Test.py
  16. Ple enter your living cities:BJ
  17. ple enter your name:Jmilk
  18. Ple enter your age:23
  19. a
  20. BJ
  21. Jmilk
  22. 23

Jmilk

Python基本语法_函数_参数的多类型传值的更多相关文章

  1. python学习第五讲,python基础语法之函数语法,与Import导入模块.

    目录 python学习第五讲,python基础语法之函数语法,与Import导入模块. 一丶函数简介 1.函数语法定义 2.函数的调用 3.函数的文档注释 4.函数的参数 5.函数的形参跟实参 6.函 ...

  2. Python基本语法_函数属性 & 参数类型 & 偏函数的应用

    目录 目录 前言 软件环境 Python Module的程序入口 函数的属性 Python函数的创建 函数的参数 必备参数 缺省参数 命名参数 不定长参数 匿名参数 偏函数的应用 前言 Python除 ...

  3. 多测师讲解python _函数中参数__高级讲师肖sir

    函数中讲解参数: 形参和实参的认识 函数无参数的调用 函数单个参数的调用 函数多个参数的调用 # #调试函数给默认参数传新值,则函数使用新值 # 注意:当多种参数同时出现在函数中,默认参数要放在最后的 ...

  4. python基础语法5 函数定义,可变长参数

    函数 1.什么是函数 函数就是一种工具. 可以重复调用 2.为什么要用函数 1.防止代码冗(rong)余 2.代码的可读性差 3.怎么用函数 1.定义函数-->制造工具 2.调用函数--> ...

  5. Oracle学习总结_day03_day04_条件查询_排序_函数_子查询

    本文为博主辛苦总结,希望自己以后返回来看的时候理解更深刻,也希望可以起到帮助初学者的作用. 转载请注明 出自 : luogg的博客园 谢谢配合! day03_条件查询_排序_函数 清空回收站: PUR ...

  6. python学习笔记(3)--函数、参数、变量、递归

    1.函数基本语法和特性 背景摘要 现在老板让你写一个监控程序,监控服务器的系统状况,当cpu\memory\disk等指标的使用量超过阀值时即发邮件报警,你掏出了所有的知识量吗,写出了以下代码 whi ...

  7. python基础语法_9-0函数概念

    http://www.runoob.com/python3/python3-function.html 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代 ...

  8. python之列表作为函数的参数

    函数参数为 列表或者字典 传递一个列表,例如 [1, 2, 3] 将此传给函数get_sum() 求出 各个元素之和 传递一个字典,打印出key/value的对应关系表: #!/usr/bin/env ...

  9. python学习笔记之函数的参数

    函数的参数有位置参数和关键字参数,位置参数一定要在关键字参数的前面,位置参数的优先级是高于关键字参数的,否则会报错 def my_abs(a,b): print(a) print(b) my_abs( ...

随机推荐

  1. 自学Python5.7-面向对象三大基本特征_封装

    自学Python之路-Python基础+模块+面向对象自学Python之路-Python网络编程自学Python之路-Python并发编程+数据库+前端自学Python之路-django 自学Pyth ...

  2. Redis持久化(转载)

    原文地址:http://www.jianshu.com/p/2f14bc570563?from=jiantop.com 数据持久化 Redis提供了将数据定期自动持久化至硬盘的能力,包括RDB和AOF ...

  3. Centos修改IP的两种方式

    nmtui命令调出修改窗口:nmtui    重启网卡:/etc/init.d/network restart 或者:service network restart 方式二: 进入网络配置文件目录 首 ...

  4. python3之selenium.webdriver 库练习自动化谷歌浏览器打开百度自动百度关键字

    import os,time,threading from selenium import webdriver from selenium.webdriver.common.keys import K ...

  5. 使用CreateMetaFile创建WMF文件,并转换为EMF文件

    #include <iostream> #include <stdio.h> #include <WINDOWS.H> #include <shellapi. ...

  6. 【洛谷P3128】Max Flow

    题目大意:给定一棵 N 个节点的无根树,有 M 个操作,每次选定一条树链,将这条链上所有点的点权 +1,最后求树上点的最大点权是多少. 题解:树上差分算法的应用. 发现操作有 M 次,但是询问只有一次 ...

  7. 微信小程序let和var以及const有什么区别

    在JavaScript中有三种声明变量的方式:var.let.const. var:声明全局变量,换句话理解就是,声明在for循环中的变量,跳出for循环同样可以使用. for(var i=0;i&l ...

  8. SVN各种错误提示产生原因及处理方法大全

    SVN各种错误提示产生原因及处理方法大全 SVN各种错误提示产生原因及处理方法大全 1. svn: Server sent unexpected return value (500 Internal ...

  9. 求两个数的最大公约数和最小公倍数Java(cvte考题)

    //最大公约数 最小公倍数 通过测试 public class GongYue{ public static int gongyue(int m, int n) throws Exception{ i ...

  10. 【Winfrom-适配窗体】 WinForm窗体及其控件的自适应,控件随着窗体变化

    在Winform中,窗体最大化之后,控件仍然保持原来的大小,就会显得不好看,那么有什么办法让控件跟着窗体变化吗? 在需要自适应的Form中代码如下:(AutoSizeFormClass.cs源码在下方 ...