python-函数,,函数1、函数定义##


函数

1、函数定义

## 定义函数def test(x):    # 说明函数功能    x += 1    return x## 调用函数print(test(4))
def test():    passprint(test)  ### 输出函数名  内存地址:<function test at 0x00D91108>

2、返回值

—过程:没有返回值(return)的函数 

— python 中 没有return,默认返回 None

— 返回值>1 ,返回一个tuple(元祖)

3、函数参数

— 形参 实参

— 一个参数不能传两遍值

— 位置参数一一对应,不多不少

—关键字参数,无需一一对应,不多不少

def test(x,y,z):     print(x)     print(y)     print(z)test(z=1,y=4,x=4)

— 位置参数必须在关键字参数的左边

— 默认参数

def test(x,y=‘gogo‘):     print(x,y)test(1) ### y为默认参数   1 gogotest(4,‘not‘)  ### 传参覆盖y的默认值,  4 not

— 参数组

*列表  

def text(x,*args):    print(x,args,args[4])text(3,4,656,76,43,5,4)  ##  3 (4, 656, 76, 43, 5, 4) 5text(3,*[‘d‘,2,‘f‘])  ## 3 (‘d‘, 2, ‘f‘)

**字典 

def test(x,**kwargs):    print(x,kwargs)test(4,y=‘fd‘,z=‘ew‘)  ###  4 {‘y‘: ‘fd‘, ‘z‘: ‘ew‘}

 

def test(x,*args,**kwargs):    print(x,args,kwargs)test(4,‘sdad‘,4,5,6,y=‘fd‘,z=‘ew‘)  ###  4 (‘sdad‘, 4, 5, 6) {‘y‘: ‘fd‘, ‘z‘: ‘ew‘}

  

4、全局变量,局部变量

— 全局变量名大写

— 局部变量名小写

name = ‘全局‘def change_name():    name = ‘局部‘    print(‘change_name‘, name)change_name()  ###  change_name 局部print(name)  ### 全局

 

name = ‘全局‘def change_name():    global name    name = ‘局部‘    print(‘change_name‘, name)change_name()  ## change_name 局部print(name)  ### 局部

 

name = [‘全局‘,‘变量‘]def change_name():    name.append(‘可操作‘)    print(‘change_name‘, name)change_name()  ###  change_name [‘全局‘, ‘变量‘, ‘可操作‘]print(name)  ### [‘全局‘, ‘变量‘, ‘可操作‘]

 

5、函数嵌套

### 函数可嵌套,函数若不调用,不执行def first():    name = ‘第一层‘    print (name)    def second():        name = ‘第二层‘        print(name)    second()    print(name)first()  ### 第一层         ### 第二层

 

name = ‘全局‘def first():    name = ‘局部‘    def second():        global name        name = ‘改变‘    second()    print(name)print(name)first()print(name)### 全局### 局部### 改变

 

6、递归

— 函数内部调用自身

— 有明确结束条件(死循环会报错)

 

import timedef calc(n):    print(n)    time.sleep(1) ## 停顿1s    calc(n)calc(10)

  

def cal(n):    print(n)    if int(n/2) == 0:        return n    return cal(int(n/2))cal(10)  ### 10 5 2 1

  

7、作用域

def test1():    print(‘test1‘)def test():    print(‘test‘)    return  test1  ## return可以返回任何值res = test()   ### 执行test(),返回函数名 test1print(res)   ### 打印函数名(即函数的内存地址)<function test1 at 0x00A31108>  print(res())  ### 执行test1() ,并将返回值打印,默认为None

  

name = ‘全局‘def first():    name = ‘第一层‘    def second():        name = ‘第二层‘        def third():            print(name)        return third    return secondfirst()()()  #### 第二层

8、匿名函数

def calc(x):    return x+1print(calc(12))### 可以表示为匿名函数的形式### x是形参 : 操作并return出来lambda  x:x+1   ### 类似于函数名,是内存地址### 运行匿名函数func = lambda x:x+1print(func(10))  ### 11

  

9、高阶函数

(1)函数接收的参数是一个函数名

(2)返回资中包含函数

10、map函数 

map(func(函数功能),array(可迭代对象)):处理序列中的每个元素,得到的结果是一个‘列表’,该‘列表’元素的个数及位置与原来相同

num = [1, 2, 3, 4, 5, 6]def map_test(func, array):    ret = []    for i in num:        res = func(i)        ret.append(res)    return retprint (map_test(lambda x: x + 1,num))  ###[2, 3, 4, 5, 6, 7]### 用map 函数实现s = map(lambda x:x**2,num)print(list(s))  ###  [1, 4, 9, 16, 25, 36]

 

11、filter 函数(过滤)

filter(func(函数功能),array(可迭代对象)):遍历序列中每一个元素,判断元素是否满足条件得到布尔值,如果是True则保留

member = [‘gogo‘,‘baba‘,‘kaka‘]def filter_test(func,array):    ret = []    for p in member:        if not func(p):            ret.append(p)    return  retres = filter_test(lambda n:str(n).endswith(‘a‘),member)print(res)  ### [‘gogo‘]### 用filter 函数实现print(list(filter(lambda n:not str(n).endswith(‘a‘),member)))

  

 12、reduce函数

filter(func(函数功能),array(可迭代对象),initial(初始值)):处理一个序列,对序列进行合并操作

### 列表元素相乘,设置初始值initnum = [1,2,3,4,5]def reduce_test(func,array,init=None):    if init is None:        res = array.pop(0)    else:        res = init    for num in array:        res = func(res,num)    return  resprint (reduce_test(lambda  x,y:x*y,num,10))### reduce函数from functools import reduceprint(reduce(lambda x,y:x*y,num,10))

  

13、内置函数

### 内置函数## 1、abs()  取负数print(abs(-3))  ## 3## 2、all()  取所有元素做布尔运算## False: 0  ‘ ‘   None  []## 可迭代对象为空,返回Trueprint(all([1,2,‘re‘,0]))## 3、any()  任意为真则为真print(any([1,0,‘‘]))## 4、bin()  十进制转二进制##    hex()  十进制转十六进制##    oct()  十进制转八进制print(bin(3))## 5、bool()  布尔运算  False:空,None,0print(bool(1))## 6、bytes()  字节name = ‘好‘print(bytes(name,encoding=‘utf-8‘))  ## b‘\xe5\xa5\xbd‘   3字节一个汉字print(bytes(name,encoding=‘utf-8‘).decode(‘utf-8‘))print(bytes(name,encoding=‘gbk‘))  ## b‘\xba\xc3‘   2字节一个汉字print(bytes(name,encoding=‘gbk‘).decode(‘gbk‘))#print(bytes(name,encoding=‘ascii‘))  ## ascii码不能编码汉字## 7、divmod()  商,余数print(divmod(10,3))  ## (3, 1)## 8、eval()## 把字符串中的数据结构提取出来## 把字符串中的数学运算进行运算print(eval(‘2+3+4‘))## 9、hash()## 可hash的数据类型,即不可变数据类型## 判断是否被修改name = ‘hh‘print(‘before‘,hash(name))  ## before -1094276877name = ‘kk‘print(‘after‘,hash(name))   ##  after 210196591## 10、isinstance()print(isinstance(4,int)) ##  判断类型## 11、globals() 打印全局变量print(globals())##    locals() 打印局部变量print(locals())## 12、 zip() 拉链  传序列   一一对应,多余舍去##  序列:列表、元祖、字符串print(list(zip((‘a‘,‘s‘,‘d‘),(1,2,3))))  ##[(‘a‘, 1), (‘s‘, 2), (‘d‘, 3)]dic = {‘name‘:‘Amy‘,‘age‘:19,‘gender‘:‘female‘}print(list(zip(dic.keys(),dic.values())))##  [(‘name‘, ‘Amy‘), (‘age‘, 19), (‘gender‘, ‘female‘)]print(list(zip(‘hello‘,‘123‘)))## [(‘h‘, ‘1‘), (‘e‘, ‘2‘), (‘l‘, ‘3‘)]

  

min() max()

— 处理对象是可迭代类型,相当于循环每一个元素进行比较

— 不同类型元素无法比较

— 每个元素进行比较,是从元素第一个位置开始比较,如果这个位置比较出大小,后面位置可不用比较,直接得出大小

## 13、 max()  min()  最大最小值## 不同类型不能进行比较li = [1,2,3,45,6]print(max(li))### 字典中的最值age_dic = {‘age1‘:12,‘age4‘:13,‘age3‘:16}print(max(age_dic))  ### 默认比较key  age4print(max(age_dic.values())) ### 比较value 16zip(age_dic.values(),age_dic.keys())  ## key 和 value 调换print(max(zip(age_dic.values(),age_dic.keys())))  ## (16, ‘age3‘)people = [    {‘name‘:‘Amy‘,‘age‘:45},    {‘name‘: ‘Bob‘, ‘age‘: 34},    {‘name‘: ‘Lisa‘, ‘age‘: 23},    {‘name‘: ‘Lucy‘, ‘age‘: 26},]print(max(people,key=lambda dic:dic[‘age‘]))   ## {‘name‘: ‘Amy‘, ‘age‘: 45}

  

## 14、 chr()  打印ASCII码表中位置##      ord()  与上面相反## 15、pow()print(pow(3,3))  ## 3**3print(pow(3,3,2))  ## 3**3%2## 16、reversed()  反转print(list(reversed([1,2,3,4])))  ### [4, 3, 2, 1]## 17、round()  四舍五入print(round(8.7))  ## 9## 18、slice()  切片s = ‘hello‘s1 = slice(3,5)print(s[s1])  ## lo

  

## 19、sorted()  排序li = [3,5,1,4,1,3]print (sorted((li)))  ##  [1, 1, 3, 3, 4, 5]## 列表排序people = [    {‘name‘:‘Amy‘,‘age‘:45},    {‘name‘: ‘Bob‘, ‘age‘: 34},    {‘name‘: ‘Lisa‘, ‘age‘: 23},    {‘name‘: ‘Lucy‘, ‘age‘: 26},]print(sorted(people,key=lambda dic:dic[‘age‘]))## 字典排序name_dic = {    ‘Amy‘:99,    ‘Haha‘:78,    ‘Kaka‘:90}print(sorted(name_dic))  ### 默认根据key排序print(sorted(name_dic,key=lambda  key:name_dic[key]))  ###  [‘Haha‘, ‘Kaka‘, ‘Amy‘]print(sorted(zip(name_dic.values(),name_dic.keys())))   ##  [(78, ‘Haha‘), (90, ‘Kaka‘), (99, ‘Amy‘)]

  

## 20、sum()  求和print(sum(range(5)))  ## 10## 21、 type()  数据类型print(type(‘we‘))  ## <class ‘str‘>## 22、 vars()def test():    ## 打印 {‘msg‘: ‘hello hello hi‘}    msg = ‘hello hello hi‘    print(locals())    print(vars())test()## 23、import   不能导入字符串模块名##     __import__()   导入字符串模块名

  

python-函数

评论关闭