Python函数详解(二)

一、变量作用域

  • 变量作用域,也就是变量的有效作用范围,也就是该变量可以访问固定的区域,如果超出该区域,在访问时就会报错。在程序中,会根据变量的有效作用范围将变量分为“全局变量”和“局部变量”。

1、全局变量

  • Python允许在所有函数的外部定义变量,这样的变量称为全局变量(Global Variable)。全局变量的默认作用域是整个程序,即全局变量既可以在各个函数外部使用,也可以在各函数的内部使用。

    a=5     #在demo函数外部创建变量a,变量a为全局变量
    print('函数外部变量a:',a)
    def demo():
        c=a**2      #在demo函数内部可以直接调用变量a进行使用
        print('函数内部变量a:',a)
        return c
    print(demo())
    
    #函数外部变量a: 5
    #函数内部变量a: 5
    #25
    

2、局部变量

  • 局部变量是指在函数内部创建并且进行使用的变量,它只在函数内部有效。即函数内部的变量名字只在函数运行时进行创建,并且只能在函数内部进行调用,在函数运行后,所有变量名字都会被释放,不复存在。所以如果在函数外部调用这个变量,便会抛出NameError异常。

    def demo():
        a=3     #在demo函数内部创建变量a,变量a为局部变量
        b=2*a       #在demo函数内部调用变量a
        return b
    c=2*a       #函数外部调用变量a会报错
    
  • 局部变量是函数内部的占位符,与全局变量可能重名但不同

    a=5		#函数外部创建全局变量a
    def demo():
    	a=3		#函数内部创建局部变量a
    	c=a**2
    	print('在函数内部打印变量a:',a)#打印局部变量a
    	return c
    print('在函数外部打印变量a:',a)#打印全局变量a
    print(demo())	#打印函数返回值
    
    #在函数外部打印变量a:5
    #在函数内部打印变量a:3
    #9
    
  • 局部变量为组合数据类型且为创建,等同于全局变量

    li=[1,2,3]      #在函数外部创建全局变量li为列表类型
    def demo(a):
        li.append(a)        #函数内部并未创建列表li,直接进行调用
        return
    demo(4)     #调用demo函数修改全局变量li的值
    print(li)
    
    #[1, 2, 3, 4]
    

3、global关键字

  • 在函数体内定义,并使用global关键字修饰后,该变量也就变为全局变量。在函数体外也可以访问到该变量,并且在函数体内还可以对其进行修改

    a=5
    def demo():
        global a    #global关键字定义变量a,a为全局变量
        a=a*5
        print('输出函数内部变量a:',a)
        return a
    print(demo())
    print('调用后输出函数外部变量a:',a)
    
    #输出函数内部变量a: 25
    #25
    #调用后输出函数外部变量a: 25
    

二、匿名函数(lambda)

  • 匿名函数是指没有名字的函数,应该在需要一个函数,但是又不想费神去名门这个函数的场合。通常情况下,这样的函数只使用一次。

  • Python中,使用lambda表达式创建匿名函数,语法格式如下:

     result=lambda<参数>:<表达式>
    

    resul:用于调用lambda函数的表达式(可以认为是特殊的函数名)
    上述语法格式等价于:

     def <函数名>(<参数>):
     	<函数体>
     	return <返回值>
    

    例:定义一个求圆面积的函数

    #①正常定义函数方式
    def demo(r):
        s=3.14*r*r
        return s
    #②采用lambda函数定义
    s= lambda r:3.14*r*r
    
    print(demo(2))  #demo函数传参,求半径为2圆的面积
    print(s(2)) #匿名函数传参,求半径为2圆的面积
    
    #12.56
    #12.56
    

    使用lambda表达式时,参数可以有多个,使用英文逗号进行分隔,但是表达式只准有一个,也就是只会有一个返回值。而且也不能出现其他非表达式语句(如:for、while等)。
    因此lambda函数用于定义简单的、能够在一行内表达的函数。
    例:定义匿名函数来求两个数字的和:

    count = lambda x,y :x+y
    print(count(2,3))
    
    #5
    
     lambda函数主要用作一些特定函数或方法的参数
     lambda函数不能包含命令,包含的表达式不能超过一个
     一般情况,建议使用def定义的普通函数
    

    例:对字典所组成的类别进行排序,直接使用sorted会报错:

    lis=[{'name':'taobao','age':15},
         {'name':'huahua','age':24},
         {'name':'goog','age':200},
         {'name':'wiki','age':100}]
    print(sorted(lis))
    
    #TypeError: '<' not supported between instances of 'dict' and 'dict'
    

    这种复杂数据需要指明排序规则,sorted(iterable,key=排序规则)
    key:主要是用来进行比较的元素,只有一个参数,具体的函数参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。用匿名函数来设置排序规则比较简洁一些。

    lis=[{'name':'taobao','age':15},
         {'name':'huahua','age':24},
         {'name':'goog','age':200},
         {'name':'wiki','age':100}]
    
    #通过 age 升序排序
    print('列表通过 age 升序排序:')
    print(sorted(lis,key=lambda i:i['age']))
    
    #通过 name 升序排序
    print('列表通过 name 升序排序:')
    print(sorted(lis,key=lambda i:i['name']))
    
    #先按 age 排序,再按 name 排序
    print('列表通过 name 升序排序:')
    print(sorted(lis,key=lambda i:(i['age'],i['name'])))
    
    #按 age 降序排序
    print('列表通过 age 降序排序:')
    print(sorted(lis,key=lambda i:i['age'],reverse=True))
    
    #列表通过 age 升序排序:
    #[{'name': 'taobao', 'age': 15}, {'name': 'huahua', 'age': 24}, {'name': 'wiki', 'age': 100}, {'name': 'goog', 'age': 200}]
    #列表通过 name 升序排序:
    #[{'name': 'goog', 'age': 200}, {'name': 'huahua', 'age': 24}, {'name': 'taobao', 'age': 15}, {'name': 'wiki', 'age': 100}]
    #列表通过 name 升序排序:
    #[{'name': 'taobao', 'age': 15}, {'name': 'huahua', 'age': 24}, {'name': 'wiki', 'age': 100}, {'name': 'goog', 'age': 200}]
    #列表通过 age 降序排序:
    #[{'name': 'goog', 'age': 200}, {'name': 'wiki', 'age': 100}, {'name': 'huahua', 'age': 24}, {'name': 'taobao', 'age': 15}]
    

三、内置函数

  • Python解释器内置了很多函数和类型,任何时候都能使用。

1、数学运算函数

操作函数或方法描述
ads()返回绝对值
divmod()返回包含除数和余数的元组
max()返回给定参数的最大值,参数可以为多个数字或序列
min()返回给定参数的最小值,参数可以为多个数字或序列
round()浮点型四舍五入
sum()求和,参数为一个可迭代对象(如一个list)
pow()求幂运算
eval()用来执行一个字符串表达式,并返回表达式的值

2、 类型转换函数

操作函数或方法描述
bool()返回一个布尔类型
int()将一个字符串或数字转换为整数
float()将整数或字符串转换成浮点型
str()将对象转换为字符串类型
ord()它以一个字符(长度为1的字符串)作为参数,返回对应的ASCII数值,或者Unicode数值
chr()用一个范围在 range(256)内的(0~255)整数作参数,返回一个对应的字符
tuple()将其他序列转换为元组类型
list()将其他类型转换为列表类型
dict()用于创建一个字典
set()创建一个无序不重复元素集,可进行关系测试,删除重复数据,还可以计算交集、差集、并集等
enumerate()用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在for循环当中
range()可创建一个等差数列,一般用在for循环中
object()对象
bin()返回二进制字符串
oct()用于将10进制整数转换成8进制,以字符串形式表示
hex()用于将10进制转换成16进制,以字符串形式表示

3、序列操作函数

操作函数或方法描述
all()用于判断给定的可迭代参数 iterable 中所有元素是否不为0、”、False 或者 iterable 为空,如果是返回True,否则返回False
any()用于判断给定的可迭代参数 iterable 是否全部为空对象,如果都为空、0、false,则返回False,如果都不为空、0、false,则返回True
filter()过滤器,用来过滤掉不符合条件的元素,返回符合条件元素构成的新的列表,应该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判断,然后返回True或False,最后将返回True的元素放到新的列表中
map()根据提供的函数对指定序列做映射,第一个参数function以参数序列中的每一个元素调用function函数,返回包含每次function函数返回值的新列表
next()返回迭代器的下一个项目
sorted()函数对所有可迭代的对象进行排序操作sort是应用在list上的方法,sorted可以对所有可迭代的对象进行排序操作,list的sort方法返回的是对已经存在的列表进行操作,而内建函数sorted方法返回的是一个新的list,而不是在原来基础上进行操作

4、对象操作函数

操作函数或方法描述
help()用于查看函数或模块用途的详细说明
dir()函数不带参数时,返回当前范围内的变量,方法和定义的类型列表;带参数时,返回参数的属性、方法列表。如果参数包含方法dir(),该方法将被调用。如果参数不包含dir(),该方法将最大限度地收集参数信息
type()打印类型信息
ascii返回一个字符串,表示对象的可打印形式
format()格式化输出的函数
vars()返回对象object的属性和属性值的字典对象

5、交互操作函数

操作函数或方法描述
print()打印输出
input()函数接受一个标准输入数据,在python3中返回str

6、文件操作函数

操作函数或方法描述
open()文件IO的最基本操作函数,用来打开一个文件,创建一个file对象
  • 11
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值