1、函数
# 定义了之后,可以在任何需要它的地方调用
# 没有返回长度,只是单纯的打印
s = '金老板小护士' def my_len(): #自定义函数 i = 0 for k in s: i += 1 print(i) length = my_len() print(length)
2、返回值的3种情况
# 没有返回值 —— 返回None
# 不写return
# 只写return:结束一个函数的继续
# return None —— 不常用
#不写return s='hhhhhhh' def my_len(): i=0 for x in s: i +=1 ret=my_len() print(ret) #只写return s='hhhhhhh' def my_len(): i=0 for x in s: i +=1 return ret=my_len() print(ret) #return None s='hhhhhhh' def my_len(): i=0 for x in s: i +=1 return None ret=my_len() print(ret)
# 返回1个值
# 可以返回任何数据类型
# 只要返回就可以接收到
# 如果在一个程序中有多个return,那么只执行第一个
#只执行第一个return s='hhhhhhh' def my_len(): i=0 y=0 for x in s: i +=1 return i y +=1 return i ret=my_len() print(ret)
# 返回多个值
# 用多个变量接收:有多少返回值就用多少变量接收
# 用一个变量接收: 得到的是一个元组
#多个变量接收 def func(): return 1,2,3 x,y,z=func() print(x,y,z) #一个变量接收 def func(): return 1,2,3 r=func() print(r)
3、参数
#没有参数
#定义函数和调用函数时括号里都不写内容
#有一个参数
#传什么就是什么
#有多个参数
#位置参数
def my_sum(a,b):#括号里面是形参 print(a,b) res = a+b #result return res ret = my_sum(1,2)#括号里面是实参 print(ret)
4、站在实参的角度上:
#按照位置传参
#按照关键字传参
#混着用可以:但是 必须先按照位置传参,再按照关键字传参数;不能给同一个变量传多个值
#位置传参 def my_sum(a,b): print(a,b) res = a+b #result return res ret = my_sum(1,2) print(ret) #关键字传参 def my_sum(a,b): print(a,b) res = a+b #result return res ret = my_sum(a=1,b=2) print(ret) #混着用(但不能变成a=2,会报错) def my_sum(a,b): print(a,b) res = a+b #result return res ret = my_sum(1,b=2) print(ret)
5、站在形参的角度上
#位置参数:必须传,且有几个参数就传几个值
#默认参数: 可以不传,如果不传就是用默认的参数,如果传了就用传的
def classmate(name,sex='男'): print('%s : %s'%(name,sex)) classmate('刘') classmate('张','女')
6、#定义函数的时候:
#位置参数 : 直接定义参数
#默认参数,关键字参数 :参数名 = '默认的值'
#动态参数 : 可以接受任意多个参数
#参数名之前加*,习惯参数名args,
#参数名之前加**,习惯参数名kwargs
#顺序:位置参数,*args,默认参数,**kwargs
def func(x,*args,default = 1,**kwargs): print(x,args,default,kwargs) func(1,2,3,4,5,default=2,a = 'aaaa',b = 'bbbb',)
7、动态参数的另一种方式
def func(*args):#站在形参的角度上,给变量加上*,就是组合所有传来的值。 print(args) func(1,2,3,4,5) l = [1,2,3,4,5] func(*l) #站在实参的角度上,给一个序列加上*,就是将这个序列按照顺序打散
8、函数注释
def func(): ''' 这个函数实现了什么功能 参数1: 参数2: :return: 是字符串或者列表的长度 ''' pass
9、三元算法
a = 1 b = 5 c = a if a>b else b #三元运算 print(c) # 变量 = 条件返回True的结果 if 条件 else 条件返回False的结果 #必须要有结果 #必须要有if和else #只能是简单的情况
def func(filename,old,new): with open(filename, encoding='utf-8') as f, open('%s.bak'%filename, 'w', encoding='utf-8') as f2: for line in f: if old in line: line = line.replace(old,new) # 写文件 f2.write('kkkk') import os os.remove(filename) os.rename('%s.bak'%filename, filename) func('001','001','002')