设为首页 加入收藏

TOP

Python之路【第四篇】:Python基础之函数(二)
2019-08-15 00:10:20 】 浏览:504
Tags:Python 之路 四篇 :Python 基础 函数
##### def foo(x,y,*args): print(x,y) print(args) foo(1,2,3,4,5) 输出结果: C:\Python35\python3.exe C:/Users/ZR/PycharmProjects/python全栈开发/day15/def函数.py 1 2 (3, 4, 5) def foo(x,y,*args): print(x,y) print(args) foo(1,2,*[3,4,5]) 输出结果: 1 2 (3, 4, 5) def foo(x,y,z): print(1,2,3) foo(*[1,2,3]) 输出结果: 1 2 3 # ############ **kwargs ################### def foo(x,y,**kwargs): print(x,y) print(kwargs) foo(1,y=2,a=1,b=2,c=3) 输出结果: 1 2 {'c': 3, 'a': 1, 'b': 2} def foo(x,y,**kwargs): print(x,y) print(kwargs) foo(1,y=2,**{'a':1,'b':2, 'c':3}) 输出结果: #更上面输出结果相同,只不过位置有所变化 1 2 {'a': 1, 'b': 2, 'c': 3} def foo(x,y,z): print(x, y, z) foo(**{'z':1,'x':2,'y':3}) 输出结果: 2 3 1 # ##### *args + **kwargs############ def foo(x,y): print(x,y) def wrapper(*args,**kwargs): print('==========>') foo(*args,**kwargs) #5、命名关键字参数:*后定义的参数,必须被传值(有默认值的除外),且必须按照关键字实参的形式传递 def foo(x,y,*args,a=1,b,**kwargs): print(x,y) print(args) print(a) print(b) print(kwargs) foo(1,2,3,4,5,b=3,c=4,d=5) 输出结果: 1 2 (3, 4, 5) 1 3 {'c': 4, 'd': 5}

 

 

 

为什么要用参数?举例说明

如果不定义参数,用函数的话:(每个有相同功能的都写个函数,说好的代码简化呢?)

def cpu报警邮件():
    # 发送邮件提醒
 连接邮箱服务器 发送邮件 关闭连接 def 硬盘报警邮件(): # 发送邮件提醒  连接邮箱服务器 发送邮件 关闭连接 def 内存报警邮件(): # 发送邮件提醒  连接邮箱服务器 发送邮件 关闭连接 while True: if CPU利用率 > 90%: cpu报警邮件() if 硬盘使用空间 > 90%: 硬盘报警邮件() if 内存占用 > 80%: 内存报警邮件()

使用函数:(代码明显少了很多,把重复内用改为参数调用!)

def 发送邮件(内容)
    #发送邮件提醒
 连接邮箱服务器 发送邮件 关闭连接 while True: if cpu利用率 > 90%: 发送邮件('CPU报警') if 硬盘使用空间 > 90%: 发送邮件('硬盘报警') if 内存占用 > 80%: 发送邮件('内存报警')

 函数的四种不同的参数:

1、普通参数

2、默认参数

3、动态参数

普通参数:

# #### 定义函数 ###############
# name 叫做函数func的形式参数,简称:形参
def func(name):
        print(name) # #### 执行函数 ############### # 'zhurui' 叫做函数func的实际参数,简称:实参 func('zhurui')

但是普通参数有个问题!你在定义参数的时候定义了几个参数,你在调用的时候必须给他几个参数否则会报错! 

def func(name,age):
    print(name,age) func('william') 报错提示: TypeError: func() missing 1 required positional argument: 'age' 其正确的写法是: def func(name,age): print(name,age) func('william',24) 输出结果: william 24

默认参数:

在你没有给他指定参数的时候它就会使用默认参数!

def func(name, age = 24):
    print('%s:%s' %(name,age)) # 指定参数: func('william', 32) 输出结果: william:24 # 使用默认参数 func('william') 输出结果: william:27

 

三、局部变量与全局变量

在子程序中定义的变量成为局部变量,在程序的一开始定义的变量称为全局变量。

全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序。

当全局变量与局部变量同名时:

在定义局部变量的子程序内,局部变量起作用;在其他地方全局变量起作用。

name='simon' #全局变量

def change_name():
    name='牛逼的人物'  #局部变量
    print('change_name',name)

change_name()
print(name)
输出结果:
C:\Python35\python3.exe G:/python_s3/day15/全局变量与局部变量.py
change_name 牛逼的人物
simon

#输出结果要想让全局变量改变成局部变量需要在作用域中加 global name,相当于指针跟引用
代码如下:
name='simon' #全局变量

def change_name():
    global name
    name='牛逼的人物'  #局部变量
    print('change_name',name)

change_name()
print(name)

输出结果:
C:\Python35\python3.exe G:/python_s3/day15/全局变量与局部变量.py
change_name 牛逼的人物
牛逼的人物

  

name = 'simon'
def test1():
    #name = '孙悟空'
    global name #将全局变量引用过来,已经声明,name就是全局的那个变量
    print('我要搞', name)
def test2():
    name = '基'
    print('我要搞', name)
#如果函数的内部无 global关键字,优先读取局部变量,能读取全局变量,无法对全局变量重新赋值 NAME='fff',但是对于可变类型,可以对内部元素进行操作
#如果函数中有global关键字,变量本质上就是全局的那个变量,可读取可赋值
test1()
test2()

注意:

全局变量变量名大写

局部变量变量名小写

def huangwei():
    name = '黄伟'
    print(name)
    def liuyang():
        name = '刘洋'
        print(name)
        def nulige():
            name = '沪指花'
            print(name)
        print(name)
        nulige()
    liuyang()
    print(na
首页 上一页 1 2 3 4 5 下一页 尾页 2/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Ruby数组(2):数组方法详细整理 下一篇python 3.x 用户登录重设密码

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目