函数
#coding=utf-8
"""
- 函数:定义时的采参数 -形式参数
参数:
1、形式参数--形参
2、实际参数--实参
参数传递过程:实参传给形参
参数的定义类型:
- 位置参数 传入的实参必须和形参一一对应
def func(a,b,c):
- 2、关键字传参
- 3、默认参数:需要放在后面定义,必须放在可变参数前面;
- 4、可变参数:元组、字典 传入方式:1、直接传入 2、通过解包传入
1、直接传入:
元组:
>>> def func(a,*kwargs):
... result = 0
... result += a
... for v in kwargs:
... result += v
... print(result)
... print(type(kwargs))
... print(kwargs)
...
>>> func(10,20,40,50)
120
<class 'tuple'>
(20, 40, 50)
>>> func(10)
10
<class 'tuple'>
()
字典:
>>> def func(a,**kwargs):
... result = 0
... result += a
... for v in kwargs.values():
... result += v
... print(type(kwargs))
... print(kwargs)
... return result
...
>>> print(func(10,b=20,c=30))
<class 'dict'>
{'b': 20, 'c': 30}
60
2、通过解包传入
元组
>>> l=(1,2,3)
>>> def a(*b):
... result = 0
... for c in b:
... result += c
... return result
...
>>> a(*l)
6
字典:
>>> q = {"a":1,"b":2,"c":3}
>>> def t(**p):
... result = 0
... for d in p.values():
... result += d
... return result
...
>>> t(**q)
6
不可变数据类型:改变变量的值后,id值也会跟着变,已经不是原来的对象
可变数据类型:数字 字符串 元组,改变变量值后,id地址值不变,还是原来的对象
传参的类型:
- 1、值传递:一般不可变数据类型 都是值传递
- 2、引用传递:可变数据类型 都是引用传递
"""
"""
练习题:
练习1:
1.定义一个函数add(x,y),要求有个值result,并打印result;
def add(x,y):
result = x +y
return result
print(add(6,5))
练习2:
定义:位置参数、缺省参数、元组参数、字典参数,并求和;
def f(a,b,c,d=100,*arg,**kwargs):
result = 0
result += a
result += b
result += c
result += d
for v in arg:
result += v
for g in kwargs.values():
result += g
print(type(arg))
print(type(kwargs))
print(arg,kwargs)
return result
print(f(1,2,3,40,60,e=50,r=60,t=70))
练习3:
3、函数参数传入5个字母,声明一个可变参数的函数,拼成一个单词;
#1
def a(a,b,c,*d):
a = str(a)
b = str(b)
c = str(c)
result = ""
result = result + a
result = result + b
result = result + c
for i in d:
result += i
return result
print(a("a","b","c","d","w"))
#2
def join_word(a,b,*args):
res = []
res.append(a)
res.append(b)
for c in args:
res.append(c)
return "".join(res)
print(join_word('w','o','r','l','d'))
练习4:
4、列表[1,2,3,4,5,6]每个值加2;
>>> l=[1,2,3,4,5,6]
>>> map(lambda x:x+2,l)
<map object at 0x0000025A41A545C0>
>>> list(map(lambda x:x+2,l))
[3, 4, 5, 6, 7, 8]
练习5
5、读入一组数字,然后把每组数字加1后暑促,比如”123“,输出234;
>>> int("".join(list(map(lambda x : str(int(x) + 1) ,"123"))))
234
"""
"""
知识点
实参没有传入,形参永远指向一个内存地址
def add_end(L=[]):
L.append('END')
return L
print (add_end([1, 2, 3])) #调用正常
print (add_end(['x', 'y', 'z'])) #调用正常
print (add_end())#调用正常
print (add_end())#调用不正常
print (add_end())#调用不正常
def add_end(L=None):
if L is None:
L = []
L.append('END')
return L
eval函数
>>> s = input("请输入:")
请输入:[1,2,3,4]
>>> s
'[1,2,3,4]'
>>> eval(s)
[1, 2, 3, 4]
文档字符串
def sum(a,b):
'''主要用于两数相加,光荣之路公司出品'''
return float(a) + float(b)
print(sum(10,5))
print(sum.__doc__)
D:\>py c.py
15.0
主要用于两数相加,光荣之路公司出品
python
Lamda 函数
代码示例1:
g = lambda x:x+1
print (g(1))
print (g(2))
结果显示:
2
3
代码示例2:
# -*- coding: UTF-8 -*-
g = lambda x, y, z : (x + y) ** z
print (g(1,2,3))
结果显示:
27
代码示例3:
def make_repeater(n):
return lambda s: s*n
twice = make_repeater(2) #s: s*n = s: s*2
print (twice('word')) #s: s*2 = 'word'*2
#结果wordword
print (twice(5)) #s: s*2 = 5*2
#结果10
map函数
>>> def func(x):
... return x+2
...
>>> l = [1,2,3]
>>> map(func,l)
<map object at 0x0000025A419A16D8>
>>> list(map(func,l))
[3, 4, 5]
执行过程:
[1,2,3]
1 + 2 = 3
2 + 2 = 4
3 + 2 = 5
list(3,4,5)
[3,4,5]
等同于
map+lambda
>>> l = [1,2,3]
>>> map(lambda x : x + 2,l)
<map object at 0x0000025A41A54588>
>>> list(map(lambda x : x + 2,l))
[3, 4, 5]
执行过程:
1 + 2 = 3
2 + 2 = 4
3 + 2 = 5
list(3,4,5)
[3,4,5]
>>> map(lambda x,y : x + y,[1,2,3],[3,2,1])
<map object at 0x000001C95748E438>
>>> list(map(lambda x,y : x + y,[1,2,3],[3,2,1]))
[4, 4, 4]
>>> list(map(lambda x,y : x + y,[1,2,3],[3,2]))
[4, 4]
>>> list(map(lambda x,y : x + y,[1,2,3],[3,2,1,10]))
[4, 4, 4]
六大剑客:lambda map fiter reduce 切片 推导列表
周三 列表、元组
"""