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来修改

 

posted @ 2019-01-10 00:25  MarkaiElsa  阅读(161)  评论(0编辑  收藏  举报