python开发之路---第二章之--基本函数介绍
1、函数: 是指一组语句的集合,通过一个名字(函数名)封装起来,要想执行这个函数,只需要调用函数名即可
优点:
# 减少重复代码
# 使程序可扩展
# 使程序易维
栗子1:
1 def sayhi(): 2 print ('hello') 3 4 sayhi()
## sayhi 是指向函数的内存地址,加了() 就是执行这个函数
# 如下又是一种,这个是可以给函数插入参数,参数可以根据调用时传入的参数的不同,来决定内部执行代码的流程
eg:(1)
1 def sayhi(name): 2 print('hello',name) 3 4 say('feifei')
eg:(2)
1 def cale(x,y): 2 res = x ** y 3 print(res) 4 5 cale(5,10) 6 cale(2,10)
#形式参数和实参
1 def cale(x,y) ## 形参,只在函数内部有效,只有在调用并分配值得时候,才会分配内存空间,并在调用结束后,就释放内存 2 res= x ** y 3 return res 4 5 c = cale(a,b) ## 实参 6 print(c)
##默认参数,默认参数必须放在位置参数的后面(必须必须!!!)
1 def stu_register(name,age,course,country='CN',): ##country就是默认参数,默认参数必须放在最后面 2 print('-----注册学生信息-----') 3 print('姓名',name) 4 print('age',age) 5 print('国籍',country) 6 print('课程',course) 7 8 9 stu_register('feifei',23,'中文')
## 关键参数,不想按顺序的时候就用关键参数,关键参数必须放在位置参数的后面
def stu_register(name,age,course,country='CN',): print('-----注册学生信息-----') print('姓名',name) print('age',age) print('国籍',country) print('课程',course) stu_register('王大哥',course='PYthon',age=22,) ##j绝对不可以这样 ## stu_register('王大哥',course='PYthon',23)
## 非固定参数,如果参数中出现了*形式参数,传递的参数就可以不再是固定参数,会把传入的参数打包称为一个元祖,发送给*agrs,
def send_alert(msg,*agrs) ## 一个※ 代表可以传入无限数量的参数都代表*usr for u in users:
print('我要发信息给',u)
##方式一参数传递方式:
send_alert('我要发信息',‘alex’,'abc')
##方式二参数传递方式:*号后手动加上'[ ]'
send_alert('我要发信息',*[‘alex’,'abc'])
## 非固定参数2, 2个*的形式参数 **kwargs 接受的是关键字参数
def func(name,*args,**kwargs): print(name,args,kwargs) func('pengfei',22,'tesla','1000w')
func('pengfei',22,'tesla','1000w',addr='山东',num='12442323')
### 局部变量: 在变量里面定义的变量就是局部变量
1 name = 'wang shanshan' 2 3 def change_name(): 4 name = '王珊珊' 5 print('在',name,'里面...') 6 7 change_name() # 这里打印的name已改 8 9 print(name) # 这里的name还是原来的值
##全局变量:函数内部没有赋值,如果函数外有变量赋值,就会调用函数外的变量,函数内部的变量优先级高于函数外
1 name = 'wang shanshan' 2 3 def change_name(): 4 # name = '王珊珊' 5 print('在',name,'里面...') 6 7 change_name() 8 9 print(name)
## 修改全局变量: global 在函数内修改全局变量
1 name = 'wang shanshan' 2 3 def change_name(): 4 global name # 把全局的name进行修改 5 name = '王珊珊' 6 print('在',name,'里面...') 7 8 change_name() 9 print(name,id(name))
##在函数内部修改全局变量--列表的数据是可以的,除了不可变元素(数字,字符串不能修改之外,别的都可以)
1 name = ['alex','wangqi','peiqi'] 2 3 def change_name(): 4 # 5 name[2] = 'New_peiqi' 6 print(name) 7 8 change_name() 9 print(name,) 10 11 ## 在函数内部修改全局变量的内容,是可以的,这涉及到列表的知识点,name本身是一个内存地址, 12 # name类别中的每一个值又是一个内存地址,name本身的内存地址是无法修改的,name中的值是可以修改的
## 如果一定要在函数内部修改全局的变量整体,就要用到global来修改