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(line) # 小护士:金老板
import os
os.remove(filename) # 删除文件
os.rename('%s.bak'%filename, filename) # 重命名文件
