Python 学习笔记-函数(一)传参

首先明确字符串,数字和元组作为函数参数时是不可变的,但是列表和字典等数据结构却是可以改变的。

def change(n):
    n[0]=‘apple‘
names=[‘banana‘,‘pear‘]
n=names[:]
change(n)
print names,n
[‘banana‘, ‘pear‘] [‘apple‘, ‘pear‘]

修改后让原始列表保持不变。

假设现在要编写一个存储姓名, 年龄,部门并能够根据这三样进行联系人查询的程序:

因为是查询多个元素,首先想到了字典这种数据结构,考虑建立一个大字典storage内存在三个小字典names,age,dept.

首先建立一个字典初始化函数:

def init(data):
    data[‘names‘]={}
    data[‘age‘]={}
    data[‘dept‘]={}
storage={}
print init(storage)

None

在获得信息之前,先编写一个获得信息函数,data字典,label为names, age和dept, info是具体个人信息,比如jack,25,finance和lee 25 hr,则data[age][25]就会返回‘jack,25,finance‘和‘lee,25,hr‘两项。

def lookup(data,label,info):
    return data[label].get(info)

接下来想办法怎样把值存入字典:

def store(data,infos):
    linfo=infos.split() 
    labels = ‘name‘,‘age‘,‘dept‘ 
    for label,info in zip(labels,linfo): #并行遍历两个list
        people=lookup(data, label, info) 
        if people:
            people.append(infos) #如果已存在键,只添加值。
        else:
            data[label][info]=[infos] #如果不存在,则创建新的键值。注意这里[info]代表一个字符串列表。
mylist={}
init(mylist)
store(mylist,‘LEE 26 HR‘)
store(mylist,‘ZHANG 27 HR‘)
store(mylist,‘LEE 26 Engineering‘)
lookup(mylist,‘name‘,‘LEE‘)
{‘dept‘: {‘HR‘: [‘LEE 26 HR‘, ‘ZHANG 27 HR‘], ‘Engineering‘: [‘LEE 26 Engineering‘]}, ‘age‘: {‘26‘: [‘LEE 26 HR‘, ‘LEE 26 Engineering‘], ‘27‘: [‘ZHANG 27 HR‘]}, ‘name‘: {‘LEE‘: [‘LEE 26 HR‘, ‘LEE 26 Engineering‘], ‘ZHANG‘: [‘ZHANG 27 HR‘]}}

再调用函数的时候,可以提供参数的名字,代码更加易读:

def hello1(greeting,name):
    print ‘%s,%s‘ % (greeting,name)  
hello1(name=‘Shuwei‘,greeting=‘Hello‘)
hello1(name=‘Hello‘,greeting=‘shuwei‘)
Hello,Shuwei
shuwei,Hello

再定义函数的时候,关键字参数可以给函数提供默认值,例如:

def hello1(greeting=‘Hello‘,name=‘Shuwei‘):

看下面一个例子,如何将参数收集成元组或字典:

def printpa(x,y,z=3,*pospar,**keypar):
    print x, y, z 
    print pospar
    print keypar
printpa(1,2,3,4,5,6,foo=1,bar=2)
printpa(1,2,foo=1,bar=2)
printpa(1,2,3,4,5,6,7,8,foo=1)
printpa(1,2,3,‘i love you‘,foo=1)
printpa(1,2,‘i love you‘,foo=1)
1 2 3
(4, 5, 6)
{‘foo‘: 1, ‘bar‘: 2}
1 2 3
()
{‘foo‘: 1, ‘bar‘: 2}
1 2 3
(4, 5, 6, 7, 8)
{‘foo‘: 1}
1 2 3
(‘i love you‘,)
{‘foo‘: 1}
1 2 i love you
()
{‘foo‘: 1}

所以*在定义函数时允许输入不定数目的参数,在调用时表示分割字符串或者列表。

能不能在一个函数中嵌套另一个呢?当然可以:

def npower(factor):
    def cal(num):
        return num**factor
    return cal
n=npower(5)
print n(2)

第一次调用npower(5),并赋给n,相当于把cal赋给n,然后n(2)就相当于cal(2),返回2**5==32,我们把cal()在npower()中的现象叫做闭包(closure)

时间: 2024-10-11 20:37:03

Python 学习笔记-函数(一)传参的相关文章

学习笔记:JavaScript传参方式———ECMAScript中所有函数的参数都是按值传递

我们把命名参数(arguments)视为局部变量,在向参数传递基本类型值时,如同基本类型变量的复制一样,传递一个副本,参数在函数内部的改变不会影响外部的基本类型值.如: 1 function add10(num){ 2 num += 10 ; 3 return num ; 4 } 5 var count = 10 ; 6 var result = add10(count); 7 alert(count);// 10 8 alert(result); //20 在向参数传递引用类型的值时,会把这个

python学习笔记 - 函数,集合,包,模块

一.函数 a=1, b=2, 交换值 定义中间量c,C=None, a,b=b,a a,b,c=1,2,3 sys.argv 实现指定的某些功能,使用的时候可以直接调用,简化代码,提高代码复用性 def fun():#定义一个函数,后面是函数名                print("Hello World")#函数体 例如: 1.def sayHello(): print("Hello World") sayHello()  --调用 2.def sayNam

python 学习笔记 函数和类

与java类似 python的函数也是出于可以复用才使用的 如果一段代码没有复用的价值就可以不用函数 一般的函数可以定义成这样: def func(a,b=123,*arg,**args): for x in arg:#arg是一个list print x for x,y in args.items():#args是一个dict print x,y print 'a:',a print 'b:',b func(1,1,2,3,4,c=1,d=2) 结果: 2 3 4 c 1 d 2 a: 1 b

Python学习笔记-函数篇

定义 返回单值 def my_abs(x): if x >= 0: return x else: return -x 返回多值 返回多值就是返回一个tuple import math def move(x, y, step, angle=0): nx = x + step * math.cos(angle) ny = y - step * math.sin(angle) return nx, ny 空函数 def nop(): pass 指定默认参数 必选参数在前,默认参数在后.默认参数需指向不

Python学习笔记——函数

1.定义函数: 在Python中,定义一个函数要使用def语句,依次写出函数名.括号.括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回.如果一个函数什么也不做,需要用到pass语句(C,Java中可以直接不写代码,python必须要写pass占位,否则报错). def my_abs(x): if x >= 0: return x else: return -x 2.参数检查: isinstance(object, classinfo),其第一个参数为对象,第二

Python学习笔记#函数中使用文档,让你的函数更容易理解

>>> def intadd(a,b): 'this is a test of the doc of function' return a+b >>> intadd(2,3) 5 >>> intadd.__doc__ 'this is a test of the doc of function' >>>

python学习笔记之函数总结--高阶函数以及装饰器

python学习笔记之函数总结--高阶函数以及装饰器 Python特点: 1.不是纯函数式编程(允许变量存在): 2.支持高阶函数(可以传入函数作为变量): 3.支持闭包(可以返回函数): 4.有限度的支持匿名函数: 高阶函数: 1.变量可以指向函数: 2.函数的参数可以接收变量: 3.一个函数可以接收另一个函数作为参数: 下面我将示例一些函数的写法以及使用,并说明python中函数的特性: 1.基本的高阶函数示例: #!/usr/bin/env python def func():      

python学习笔记(03):函数

默认参数值:   只有在行参表末尾的哪些参数可以有默认参数值,即 def func(a, b=5 )#有效的 def func( a=5,b )#无效的 关键参数: #!/usr/bin/python # Filename: func_key.py def func(a, b=5, c=10): print 'a is', a, 'and b is', b, 'and c is', c func(3, 7) func(25, c=24) func(c=50, a=100) #输出: $ pyth

python学习笔记11-python内置函数

python学习笔记11-python内置函数 一.查看python的函数介绍: https://docs.python.org/2/library/ 二.python内置函数 1.abs获取绝对值: 通过python官网查看abs abs(x) Return the absolute value of a number. The argument may be a plain or long integer or a floating point number. If the argument