到目前为止,咱们一直所接触的都是属于面向过程编程,这样的代码会下降代码的可读性,所以引入了函数式编程,在后面咱们还会学到面向对象编程。python
函数本质:将N行代码拿到别处,并给他起个名字,之后经过名字就能够找到这段代码并执行。编程
应用场景:代码重复执行,代码量特别多超过一屏,能够选择函数进行代码的分割app
def 函数名(): # 函数内容 函数名() #执行函数 注:若是函数没被调用,则内部代码永不执行
v1 = [1,2,3,4] v2 = tuple(v1) v1 = (1,2,3,4) v2 = list(v1)
def func(a,b,c): pass func(1,2,3)
def func(a,b,c): pass func(k1 = 1,k2 = 2,k3 = 3)
def func(a,b = 3): pass func(11) # 能够只写一个值,则另一个默认就是3 func(2,3) # 也能够写两个值,这样就是把2赋值给a,把3赋值给b,b不在取默认值
*args :不支持关键字传参,只能传位置参数,能够接收n个位置参数,而且将参数转化为元组函数式编程
调用函数无 *:函数
def func(*args): print(args) func(1,2,3...) # 不支持关键字传参,只能传位置参数,能够接收n个位置参数,而且将参数转化为元组
调用函数有 *:ui
def func(*args): print(args) func(*(1,2,3,4)) func(*[1,2,3,4])
**kwargs :不支持位置传参,只能关键字传参,能够接收n个关键字参数,而且转化为字典code
调用函数无**:对象
def func(**kwargs): print(kwargs) func(k1=1,k2=2,k3=3...) # 不支持位置传参,只能关键字传参,能够接收n个关键字参数,而且转化为字典
调用函数有**:索引
def func(**kwargs): print(kwargs) func(**{'k1':'alex','k2':'eric'}) # kwargs={'k1':'v2','k2':'v2'}
def func(*args,**kwargs): print(*args,**kwargs) func(1,2,3,k1=1,k2=3,k3=5) func(*[1,2,3],k1=2,k5=9,k19=999) func(*[1,2,3],**{'k1':1,'k2':3}) func(111,222,*[1,2,3],k11='alex',**{'k1':1,'k2':3})
定义函数:ip
# 第一种 def func(a,b): pass func(1,2) # 第二种 def func(a,b=None): pass func(1) # 第三种 def func(*args,**kwargs): pass func(1,k1=1)
调用函数
def get_list_first_data(aaa): # aaa叫形式参数(形参) v = [11,22,33,44] print(v[aaa]) get_list_first_data(1) # 2/2/1调用函数时传递叫:实际参数(实参)
练习: # 1. 请写一个函数,函数计算列表 info = [11,22,33,44,55] 中全部元素的和。 def value(x): var = 0 for i in x: var += i print(var) v1 = value([11,22,33,44,55])
# 2. 请写一个函数,函数将两个列表拼接起来。 def value(x,y): list1 = [] list1.extend(x) list1.extend(y) print(list1) value([1,2,3],['alex','eric'])
# 3. 计算一个列表的长度 def length(x): var = 0 for i in x: var += 1 print(var) length([1,2,3,4,5])
def func(arg): # .... return 9 # 返回值为9 默认:return None val = func('adsfadsf')
# 练习 1.写函数,计算一个列表中有多少个数字,打印: 列表中有%s个数字。 提示:type('x') == int 判断是不是数字。 def num(list): var = 0 for i in list: if type(i) == int: var += 1 return var v1 = num(['sdf',1,2,3,'sdf']) print(v1)
# 2. 写函数,计算一个列表中偶数索引位置的数据构形成另一个列表,并返回。 def double(list): var = [] for i in range(0,len(list)) : if i%2 == 0: var.append(list[i]) return var v1 = double([1,2,3,4,5,6]) print(v1)
# 3. 读取文件,将文件的内容构形成指定格式的数据,并返回。 """ a.log文件 alex|123|18 eric|uiuf|19 ... 目标结构: a. ["alex|123|18","eric|uiuf|19"] 并返回。 b. [['alex','123','18'],['eric','uiuf','19']] c. [ {'name':'alex','pwd':'123','age':'18'}, {'name':'eric','pwd':'uiuf','age':'19'}, ] """ a: def var(): list = [] with open('a.log',mode='r',encoding='utf-8') as f: for line in f: list.append(line) return list v1 = var() print(v1) b: def var(): list = [] with open('a.log',mode='r',encoding='utf-8') as f: for line in f: line = line.strip() new_line = line.split("|") list.append(new_line) return list v1 = var() print(v1) c: def var(): list = [] with open('a.log',mode='r',encoding='utf-8') as f: for line in f: line = line.strip() new_line = line.split("|") a,b,c = new_line info = {} info['name'] = a info['pwd'] = b info['age'] = c list.append(info) return list v1 = var() print(v1)
Python中:
a = 1 def s1(): x1 = 666 print(x1) print(a) print(b) b = 2 print(a) s1() a = 88888 def s2(): print(a,b) s1() s2() #打印结果 1,666,1,2,8888,2,666,8888,2
总结:
练习题 !/usr/bin/env python -*- coding:utf-8 -*- x = 10 def func(): x = 9 print(x) def x1(): x = 999 print(x) func() x = 10 def func(): x = 9 print(x) def x1(): x = 999 print(x) x1() func() # 9,999 x = 10 def func(): x = 9 print(x) def x1(): x = 999 print(x) print(x) x1() func() #9,9,999 x = 10 def func(): x = 8 print(x) def x1(): x = 999 print(x) x1() print(x) func() #8,999,8 x = 10 def func(): x = 8 print(x) def x1(): print(x) x1() print(x) func() # 8,8,8 x = 10 def func(): x = 8 print(x) def x1(): print(x) x = 9 x1() x = 10 print(x) func() # 8,9,10 x = 10 def func(): x = 8 print(x) def x1(): print(x) x1() x = 9 x1() x = 10 print(x) func() # 8,8,9,10-
name = 'dali' def func(): name = 'alex' # 在本身做用域再建立一个这样的值。 print(name) func() print(name) # ##################### name = [1,2,43] def func(): name.append(999) print(name) func() print(name) # ###################### 若是非要对全局的变量进行赋值 # 示例一 name = ["大栗",'alex'] def func(): global name name = '我' func() print(name) # 示例一 name = "大栗" def func(): name = 'alex' def inner(): global name name = 999 inner() print(name) func() print(name) # ##################### name = "大栗" def func(): name = 'alex' def inner(): global name name = 999 inner() print(name) func() print(name) # ##################### name = "大栗" def func(): name = 'alex' def inner(): nonlocal name # 找到上一级的name name = 999 inner() print(name) func() print(name)
之后全局变量都要大写,局部能够小写
主要对于函数的参数、返回值、以及函数的做用域作了简单的介绍和分享。