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)
    
  • 相关阅读:
    SCILAB简介[z]
    UG OPEN API编程基础 2约定及编程初步
    Office 2003与Office 2010不能共存的解决方案
    UG OPEN API 编程基础 3用户界面接口
    NewtonRaphson method
    UG OPEN API编程基础 13MenuScript应用
    UG OPEN API编程基础 14API、UIStyler及MenuScript联合开发
    UG OPEN API编程基础 4部件文件的相关操作
    UG OPEN API编程基础 1概述
    16 UG Open的MFC应用
  • 原文地址:https://www.cnblogs.com/rener0424/p/10291424.html
Copyright © 2011-2022 走看看