1.文件修改的两种方式
# 一:函数的参数分为两大类
# 1.形参:在定义函数时,括号内定义的变量名,称之为形式参数,简称形参==》变量名
# def func(x,y):
# x = 1
# y = 2
# print(x)
# print(y)
# 2.实参:在调用函数时,括号内传入的值称之为实际参数,简称实参===》变量值
# func(1,2)
# 二:在python中参数的种类
# 1.位置参数:
# (1)位置形参:在函数定义阶段从左到右的顺序依次定义形参(变量名),称之为位置形参
# 特点:必须被传值
# def func(x,y):
# print(x,y)
# func(1,2)
# func(1) # 少一个不行
# func(1,2,3) # 多一个也不行
# (2)位置实参:在函数定义阶段从左到右的顺序依次定义实参(传入的变量值),称之为位置实参
# 特点:按照位置传值,一一对应
# func(1,2,3,4,5,6)
# 2.关键字实参:在函数调用阶段按照key=value的形式为指定的形参传值,称之为关键字实参
# 特点:在传值时可以完全打乱顺序,但是仍然能指定形参传值
# def func(name, age, ):
# print(name, age, )
# func("egon",18)
# func(18,"egon")
# func(age=18,name="egon") # 写出关键字就可以随意赋值
# 注意:可以混用位置实参和关键字实参
# 1.但是位置实参必须放在关键字实参的前面
# 2.不能为同一个形参重复赋值
# def func(name, age, salary):
# print(name)
# print(age)
# print(salary)
# func('egon',salary=3.1,age=18)
# func('egon',salary=3.1,18) # 错误
# func('egon', 18, salary=3.1) # 错误
# func('egon',18,age=19,salary=3.3) # 错误
# 3.默认形参:在函数定义阶段就已经为某个形参赋值,该形参称之为有默认值的形参,简称默认形参
# 特点:定义阶段就已经被赋值意味着在函数调用阶段可以不用为其赋值
# def func(x,y=2):
# print(x,y)
# func(1)
# func(1,33333)
# 注意
# 1:默认形参放在位置形参的后面
# def func(y=2,x) # 错误
# pass
# 2 默认形参的值通常是不可变类型
# def func(name,hobby,hobbies=[]):
# hobbies.append(hobby)
# print("%s 的爱好是:%s" %(name,hobbies))
#
# func("egon",'play')
# func('lili','music')
# func("jack",'read')
'''
egon 的爱好是:['play']
lili 的爱好是:['play', 'music']
jack 的爱好是:['play', 'music', 'read'] 在同一个地址空间连续添加了'''
# def func(name,hobby,hobbies=None):
# if hobbies is None:
# hobbies=[]
# hobbies.append(hobby)
# print("%s 的爱好是:%s" %(name,hobbies))
#
# func("egon",'play')
# func('lili','music')
# func("jack",'read')
'''
egon 的爱好是:['play']
lili 的爱好是:['music']
jack 的爱好是:['read'] 先设置一个None 每次调用函数都生成一个新的列表空间'''
# 3 默认形参的值只在函数定义阶段被赋值一次,函数定义之后的改变对默认形参没有影响
# m=333
def func(x,y=333):# y=333
print(x,y)
y=44444
func(1)# 如果不在实参中直接修改,默认的形参是不会改变的
def register(name,age,gender='male'):
print(name)
print(age)
print(gender)
register('egon',18,)
register('jack',20,)
register('tom',21,)
register('郑秀文',18,'female')# 针对不同类型的需求来定义函数可以减少代码量
2.函数
'''
1.什么是函数
具备某一功能的工具===》函数
工具的使用:
事先准备好工具=====》函数的定义
遇到需要的运用场景就拿来用=====》函数的调用2.为什么要有函数 1.程序的组织结构不清晰,可读性差 2.如果要用到重复的功能,只能拷贝功能的实现代码===》代码冗余 3.可扩展性差3.如何使用函数
函数的使用原则:先定义,后调用
定义函数 def 函数名(参数1,参数2,参数3。。。。。)’‘’
文档注释‘’‘
代码 return 返回值
调用函数:
函数名(值1,值2,值3。。。。)'''
# 定义函数:申请内存空间把函数体代码保存下来,然后把内存地址绑定给函数名===》函数名 = 函数内存地址
# def sayhi():
# print('='*10)
# print('hello')
# print('='*10)
# print(sayhi) # 打印的是函数名的内存地址
# 二:调用函数:函数名()===》函数的内存地址(),会触发函数体代码的运行
x =10
print(x)
# sayhi()
# 二:定义函数的三种格式
# 2.1:无参函数
# def login():
# inp_name=input("your name: ").strip()
# inp_pwd=input("your pwd: ").strip()
# if inp_name == "egon" and inp_pwd == "123":
# print('login successful')
# else:
# print('login error')
#
# login()
# def sayhi():
# print('='*100)
# print('hello')
# print('='*100)
#
# sayhi()
# 2.2:有参函数
def sayhi(s, n):
print(s * n)
print('hello')
print(s * n)
sayhi('&', 10)
def max(x, y):
if x > y:
print(x)
else:
print(y)
max(10, 20)
# 2.3:空函数
def func():
pass
# 三:函数的调用
# return:
# 函数内可以有多个return,但只要执行一次函数就立刻结束,并把return后的值当作本次调用的结果返回
# 函数可以有三种形式的返回值
# 1.return 值:返回的就是值本身
# 2.return 值1,值2,值3...:返回一个元组
# 3.没有return:默认返回None
def func():
print(1)
return 123
res = func()
print(res)
# 四:函数调用的三种格式
# 4.1 语句形式:单纯地调用一下函数就完了
# def sayhi(s,n):
# # s = '-'
# # n = 20
# print(s*n)
# print('hello')
# print(s*n)
# sayhi('*',30)
# 4.2 表达式形式:
def max2(x, y):
if x > y:
return x
else:
return y
# res=max2(11,22) * 12
# print(res)
# 4.3 可以把函数的调用当作值传给另外一个函数
# print(max2(11,22))
# 总结
# 函数的使用一定要分两个阶段去看:
# 1.定义阶段:只检测语法,不执行代码
# 2.调用阶段:执行函数代码体
# 如果发生语法错误,定义阶段会立马检测出来
# def func():
# print('hello'
# 如果是逻辑错误,只能在调用阶段检测到
# def func():
# xxx
# func()
# 示范1:
def bar():
print('from bar')
def foo():
print('from foo')
bar()
foo()
# 示范2:
def foo():
print('from foo')
def bar():
print('from bar')# 虽然这个函数是后定义的但是代码还是在定义阶段并不会发生错误
foo()# 到了调用阶段找到对应的代码直接调用就行了
3.函数的参数
# 一:函数的参数分为两大类
# 1.形参:在定义函数时,括号内定义的变量名,称之为形式参数,简称形参==》变量名
# def func(x,y):
# x = 1
# y = 2
# print(x)
# print(y)
# 2.实参:在调用函数时,括号内传入的值称之为实际参数,简称实参===》变量值
# func(1,2)
# 二:在python中参数的种类
# 1.位置参数:
# (1)位置形参:在函数定义阶段从左到右的顺序依次定义形参(变量名),称之为位置形参
# 特点:必须被传值
# def func(x,y):
# print(x,y)
# func(1,2)
# func(1) # 少一个不行
# func(1,2,3) # 多一个也不行
# (2)位置实参:在函数定义阶段从左到右的顺序依次定义实参(传入的变量值),称之为位置实参
# 特点:按照位置传值,一一对应
# func(1,2,3,4,5,6)
# 2.关键字实参:在函数调用阶段按照key=value的形式为指定的形参传值,称之为关键字实参
# 特点:在传值时可以完全打乱顺序,但是仍然能指定形参传值
# def func(name, age, ):
# print(name, age, )
# func("egon",18)
# func(18,"egon")
# func(age=18,name="egon") # 写出关键字就可以随意赋值
# 注意:可以混用位置实参和关键字实参
# 1.但是位置实参必须放在关键字实参的前面
# 2.不能为同一个形参重复赋值
# def func(name, age, salary):
# print(name)
# print(age)
# print(salary)
# func('egon',salary=3.1,age=18)
# func('egon',salary=3.1,18) # 错误
# func('egon', 18, salary=3.1) # 错误
# func('egon',18,age=19,salary=3.3) # 错误
# 3.默认形参:在函数定义阶段就已经为某个形参赋值,该形参称之为有默认值的形参,简称默认形参
# 特点:定义阶段就已经被赋值意味着在函数调用阶段可以不用为其赋值
# def func(x,y=2):
# print(x,y)
# func(1)
# func(1,33333)
# 注意
# 1:默认形参放在位置形参的后面
# def func(y=2,x) # 错误
# pass
# 2 默认形参的值通常是不可变类型
# def func(name,hobby,hobbies=[]):
# hobbies.append(hobby)
# print("%s 的爱好是:%s" %(name,hobbies))
#
# func("egon",'play')
# func('lili','music')
# func("jack",'read')
'''
egon 的爱好是:['play']
lili 的爱好是:['play', 'music']
jack 的爱好是:['play', 'music', 'read'] 在同一个地址空间连续添加了'''
# def func(name,hobby,hobbies=None):
# if hobbies is None:
# hobbies=[]
# hobbies.append(hobby)
# print("%s 的爱好是:%s" %(name,hobbies))
#
# func("egon",'play')
# func('lili','music')
# func("jack",'read')
'''
egon 的爱好是:['play']
lili 的爱好是:['music']
jack 的爱好是:['read'] 先设置一个None 每次调用函数都生成一个新的列表空间'''
# 3 默认形参的值只在函数定义阶段被赋值一次,函数定义之后的改变对默认形参没有影响
# m=333
def func(x,y=333):# y=333
print(x,y)
y=44444
func(1)# 如果不在实参中直接修改,默认的形参是不会改变的
def register(name,age,gender='male'):
print(name)
print(age)
print(gender)
register('egon',18,)
register('jack',20,)
register('tom',21,)
register('郑秀文',18,'female')# 针对不同类型的需求来定义函数可以减少代码量