美文网首页
python笔记day9 - 函数2

python笔记day9 - 函数2

作者: w的狗子啊 | 来源:发表于2019-01-04 18:00 被阅读0次

一、变量的作用域

1、变量的作用域

变量在程序中能够使用的范围

2、全局变量

a.声明在函数或者类的外部的变量都是全局变量

b.变量的作用域:从声明开始到整个py文件结束,任何位置都可以使用(作用域:从声明开始到文件结束)

3、局部变量

a.声明在函数或者类的内部的变量就是局部变量

b.变量的作用域:从声明开始到函数结束,任何位置都可以使用

4、golbal的使用

golbal关键字只能在函数中使用

作用:在函数内声明一个全局变量

语法:

golbal 变量名

变量名 = 值

5、nonlocal的使用  (用到的非常少,理解就行)

nonlocal关键字只能在函数中使用

作用:在局部的局部中修改局部变量的的值

语法:

nonlocal 变量名

变量名 = 值

"""

# 思考?

funtions = []

for xin range(5):

def func1(a):

return a*x

funtions.append(func1)

t1 = funtions[0]

t2 = funtions[2]

print(t1(2),t2(2))

"""

二、函数作为变量

python中,声明函数其实就是声明一个类型是function的变量。函数名就是变量名

函数名作为变量除了可以用来调用函数获取返回值以外,普通变量能做的它都能做。

"""

# 声明类型是int类型的值a

a=10

print(type(a))

# 声明类型是dict类型的变量b

b = {'a':12,'b':200}

print(type(b))

print(b['a'])

# 声明类型是function类型的变量c

c =lambda x: x*x

print(type(c))

c(10)

# 声明类型是function类型的变量d

def d(x):

def e():

print('abc')

e()

return x*x

print(type(d))

d(10)

# 1、让一个变量给另外一个变量赋值

#声明一个列表变量list1

list1 = [1,2,3]

# 使用列表变量list1给list2赋值

list2=list1

print(list2[0])

# 声明一个函数变量func11

def func11():

print("我是函数")

# 使用函数变量func11给ff赋值

ff = func11

# 将ff当成函数来用

ff()

# 2、将变量作为列表的元素或者是字典的值

# 声明列表变量list1

list1 = [1,2,3]

# 将列表变量list1作为列表list2的元素

list2 = [list1,100]

print(list2[0][0])

# 声明一个函数变量func2

def func2():

print("我是函数2")

# 将函数变量func2作为列表list3的元素

list3 = [func2,100]

print(list3[0]())

# 3、作为函数的参数

# 将函数1作为实参,传递给函数2;这儿的函数2就是一个高阶函数(实参高阶函数)

def test(x):

print("text:",x)

if not isinstance(x,int):

x()

# 声明一个int类型的变量a

a =10

# 将变量a作为test的实参

test(a)

def func3():

print("我是函数3")

test(func3)

#3.1  sort函数

"""

def sort(key=None,reverse=False)

key - 确定排序的时候以什么值为标准来排序(默认的情况下,以列表的元素的大小为标准来排序)

需要传一个函数,函数需要一个参数和一个返回值。这的参数是列表的元素

reverse - 是否降序排序,需要穿一个bool值

"""

def yt_sort(list1,key):

if key ==None:

for indexin range(len(list1)):

for index2in range(index+1,len(list1)):

current = list1[index]

behind = list2[index2]

if behind

list1[index],list2[index2] = list2[index2],list1[index]

else:

for indexin range(len(list1)):

for index2in range(index+1,len(list1)):

current = key(list1[index])

behind = key(list2[index2])

if behind

list1[index],list2[index2] = list2[index2],list1[index]

my_list = [1,34,20,89,8]

# yt_sort(my_list)

# my_list.sort()

print(my_list)

my_list2 = [

{'name':'张三','age':18},

{'name':'李四','age':30},

{'name':'王五','age':10}

]

# my_list2.sort() # TypeError: '<' not supported between instances of 'dict' and 'dict'

# yt_sort(my_list2) # TypeError: '<' not supported between instances of 'dict' and 'dict'

def get_age(x):

return x['age']

yt_sort(my_list2, get_age)

print(my_list2)

my_list2 = [

{'name':'张三','age':18,'score':90},

{'name':'李四','age':30,'score':80},

{'name':'王五','age':10,'score':89}

]

# 取最大年龄对应的字典

max_age =max(my_list2,key=lambda x: x['age'])

print(max_age)

# 取最大成绩对应的字典

max_score =max(my_list2,key=lambda x: x['score'])

print(max_score)

# 4.变量作为函数的返回值

# 返回值是函数的函数,也叫高阶函数(返回值高阶函数)

def test2(n):

sum1 =1

    for xin range(1, n+1):

sum1 *= x

return sum1

re = test2(5) +10

print(re)

# =================================

def get_operation(char):

# char = '+'    (不能使用单行注释)

"""

根据不同的符号返回不同的功能(函数功能的描述)

    :paramchar: 运算符符号

    :return: 不同运算符对应的功能的函数

"""

    if char =='+':

# 求和的功能

        def sum(*args, **kwargs):

# args = (10,20,30)

"""求多个数的和"""

            sum1 =0

            for item1in args:

sum1 += item1

for keyin kwargs:

sum1 += kwargs[key]

print('yt')

return sum1

return sum

elif char =='*':

def mul(*args, **kwargs):

sum1 =1

            for item1in args:

sum1 *= item1

for keyin kwargs:

sum1 *= kwargs[key]

return sum1

return mul

elif char =='-':

def diff(*args):

"""求多个数的差"""

# (10, 20, 30)

            sum1 = args[0]

for indexin range(1,len(args)):

sum1 -= args[index]

return sum1

return diff

else:

print('暂时不支持这个运算符')

return None

# re是一个函数

re = get_operation('+')

# re(10, 20, 30) - 调用函数获取返回值

print(re(10,20,30))# 60  = 10+20+30

# get_operation('*')  - 这个整体是一个函数

# get_operation('*')(1, 2, 3)  - 调用求乘积的那个函数,并且获取返回值

re = get_operation('*')(1,2,3)

print(re)

# 10 - 20 - 30

print(get_operation('-')(100,20,30))

"""

四、迭代器

1、什么是迭代器(iter)

迭代器是python中的容器类型数据,同时可以存储多个数据。

取迭代器中的数据只能一个一个取,而且取出来的数据,在迭代器中就不存在

2、迭代器中数据的来源

a.将其他数据类型转换成迭代器

b.使用生成式、生成器取产生数据

3、将数据转换成迭代器

所有的序列都可以转换成迭代器

"""

# 将字符串转换成迭代器

iter1 =iter('abcd')

print(iter1)

iter2 =iter([1,10,100,1000])

print(iter2)

iter3 =iter({'name':'小明','age':20})

print(iter3)

"""

4、获取迭代器中的元素

a.

next(迭代器)/迭代器next() - 取出迭代器中第一个元素(已经去出来的元素再也会不到迭代器中了)

"""

iter1 =iter('abcd')

print(iter1)

print(next(iter1))

print(next(iter1))

print(next(iter1))

print(next(iter1))

# print(next(iter1))  # 当迭代器是空的时候,使用next获取元素,会出现StopIteration异常

print(iter2.__next__())

print(next(iter2))

# b.通过for循环取出迭代器中每个元素

for xin iter2:

print('==:', x)

# print(next(iter2))  # 出现异常StopIteration,因为for循环已经将这个迭代器中的元素取完了

"""

四、生成器

1、什么是生成器

迭代器就是生成器;迭代器不一定是生成器

调用带有yield关键字的函数,拿到的结果就是一个生成器。生成器中元素就是yield关键字后面的值。

2、生成器怎么产生数据

只要函数种有yield关键字,调用函数不会再执行函数体获取返回值,而是创建一个生成器。

当获取生成器的元素的时候,才会执行函数的函数体,执行到yield语句为止,

并且将yield后面的值作为结果返回;并且保存当前执行的位置。

获取下一个元素的时候,就从上次结束的位置接着往下去执行函数,直到函数结束或者遇到yield为止;

如果遇到yield就将yield后面的值作为结果返回,并且保存当前执行的位置。

如果函数结束了,就出现StopIteration异常。

生成器对应的函数,执行完成遇到yield的次数,决定了生成器能产生的数据的个数

相关文章

  • Python自学笔记Day9

    Python自学笔记——Day9 基本输入输出 1. 输出函数及格式化 Python两种输出值的方式: 表达式语句...

  • python笔记day9 - 函数2

    一、变量的作用域 1、变量的作用域 变量在程序中能够使用的范围 2、全局变量 a.声明在函数或者类的外部的变量都是...

  • Python学习笔记

    参考文章 Python学习笔记[2] 一步一步教你认识Python闭包 高阶函数 特殊的函数,特殊在能将函数作为参...

  • Python笔记2(函数)

    一、调用函数 调用一个函数,需要知道函数的名称和参数 调用函数的时候,如果传入的参数数量不对,会报TypeErro...

  • Python闭包函数和装饰器

    2018年7月2日笔记 7.Python函数对象和闭包 1.函数对象 函数是对象,可以给函数增加属性 上面一段代码...

  • Python 2、3的区别

    1、python2:print 函数可以不加括号 python3:print函数必须要加括号 2、python2:...

  • 1.5.5 Python内置函数

    点击跳转笔记总目录 一,Python内置函数 1.locals()和globals() 2.eval,exec,和...

  • 大师兄的Python学习笔记(五): 常用库之os包

    大师兄的Python学习笔记(四): Python的内置函数大师兄的Python学习笔记(六): 常用库之sys包...

  • Python学习笔记

    python2和python3的区别 print函数 python2的print函数可以不加括号。python3必...

  • Python ☞ day 4

    Python学习笔记之 (set)集合 & 迭代器 & 函数 & 匿名函数 & 高阶函数 set set:类似di...

网友评论

      本文标题:python笔记day9 - 函数2

      本文链接:https://www.haomeiwen.com/subject/kspkrqtx.html