zoukankan      html  css  js  c++  java
  • 6-函数的作用域和集合字典列表元祖

    变量作用域

    • 变量作用域范围限制
    • 按照作用域分类:
      • 全局(global):在函数外部定义
      • 局部(local):在函数内部定义
    • 变量的作用范围:
      • 全局变量:在整个全局范围都有效
      • 全局变量在局部可以使用(即函数内部可以使用函数外部定义的变量)
      • 局部变量可以在局部范围使用
      • 局部变量无法在全局范围使用
    • LEGB
      • L(Local)局部作用域
      • E(Encolsing function local)外部潜逃函数作用域
      • G(Global module)函数定义所在模块作用域
      • B(Buildin)python内置模块作用域

    提升局部变量为全局变量

    def fun():
    	global b1
    	b1=100
    	print("I am in fun")
    	b2=99
    	print(b2)
    fun()
    print(b1)
    

    Globals,Locals函数

    • 可以通过Globals,Locals显示出全局变量和局部变量
    • Globals和Locals是内建函数
    • 参看案例
    a=100
    b=200
    def fun(c,d):
    	e=111
    	print('local={0}'.format(locals()))
    	print('globals={0}'.format(globals()))
    fun(300,400)
    

    eval函数

    • 把一个字符串当表达式执行,返回表达式执行后的结果
    • 参考案例
    x='jjc'
    y='wcx'
    z=eval('x+y')
    print(z)
    

    exec函数

    • 跟eval功能类似,但是,不返回结果
    x='jjc'
    y='wcx'
    z1=eval('x*2')
    z=exec("print('x+y:',x+y)")
    print("*" * 20)
    print(z)
    print(z1)
    

    递归函数

    • 函数直接或者间接的调用自己
    • 优点:简洁,容易理解
    • 缺点:对递归深度有限度,消耗资源大
    • python对递归深度有限制,超过限制自动报错
    • 在写递归程序的时候,一定要注意结束调节
    x=0
    def fun():
    	global x
    	x += 1
    	print(x)
    	#函数自己调用自己
    	fun()
    fun()
    
    #斐波那契额数列
    #一列数字,第一个为1,第二个为1,从第三个开始,每一个数字的值都前两个数值的和
    #数学公式为f(1)=1,f(2)=2,f(n)=f(n-1)+f(n-2)
    #例,1、1、2、3、5····
    
    def fib(n):
    	if n==1:
    		return 1
    	if n==2:
    		return 1
    	#else:
    		return fib(n-1)+fib(n-2)
    print(fib(6))
    

    内置数据结构

    • list
    • set
    • dict
    • tuple

    list(列表)

    • 一组有顺序的数据的组合
    • 创建列表
      -空列表
    #1.创建空列表
    l1=[]
    #2.创建带值的列表
    l2=[100]
    #3.创建多个值的列表
    l3=[1,2,3,4,5]
    #4.使用list
    l4=list()
    

    分片操作

    # -*- coding: UTF-8 -*-
    l=[1,2,3,4,5,6]
    #包含左边的下标值,不包含右边的下标值
    print(l[0:5])
    #下标值可以为空,如果不写,左边下标值为0,右边下标值为最大值+1,即标示截取的最后一个数据
    print(l[:4])
    print(l[3:])
    print(l[:])
    #分片可以控制增长幅度,默认增长幅度为1
    print(l[1:5:1])
    #打印从下标1开始,每次隔一个
    print(l[::2])
    #分片之负数下标
    #下标值,增长值可以为负数,顺序为从右往左
    print(l[-4:-2])
    #如果分片一定左边比右边值大,则步长参数要为负
    print(l[-4:-2:-1])
    

    分片操作是生成一个新的list

    • 内置函数id,负责显示一个变量或者数据的唯一确定编号
    通过id可以直接判断出分片是重新生成了一份数据还是使用同一份数据
    如果两个id值一样,则表明分片产生的列表是使用同一个地址同一份数据
    否则则表明分片是重新生成了一份数据,即一个新的列表,然后把数值拷贝到新的列表中
    

    汉诺塔问题

    #!/usr/bin/python
    # -*- coding: GBK -*-
    # -*- coding: UTF-8 -*-
    def hano(n,a,b,c):
    	'''
    	汉诺塔的递归实现
    	n:代表几个盘子
    	a:代表第一个塔,开始的塔
    	b:代表第二个塔,中间过渡的塔
    	c:代表第三个塔,目标塔
    	'''
    	if n==1:
    		print(a,'-->',c)
    		print('1')
    		return None
    
    	# 把n-1个盘子,从a塔借助于c塔,挪到b塔上去
    	hano(n-1,a,c,b)
    	
            hano(1,a,b,c)
    
    	#把n-1个盘子,从b塔,借助于a塔,挪到c塔上去
    	hano(n-1,b,a,c)
    
    a='A'
    b='B'
    c='C'
    n=3
    hano(n,a,b,c)
    
  • 相关阅读:
    @loj
    @loj
    @划水记@ THUWC2020 (?)
    @codeforces
    @loj
    Spark设计理念与基本架构
    Spark源码解析
    Spark Submitting Applications浅析
    Spark RDD基本概念与基本用法
    Storm基本原理概念及基本使用
  • 原文地址:https://www.cnblogs.com/rener0424/p/10291424.html
Copyright © 2011-2022 走看看