我是靠谱客的博主 发嗲大山,这篇文章主要介绍python学习第六次,现在分享给大家,希望可以做个参考。

变量作用域

  • 变量由作用范围限制
  • 分类:按照作用于分类
    - 全局(global):在函数外部定义
    - 局部(local):在函数内部定义
  • 变量的作用范围:
    • 全局变量:在整个全局范围内都有效
    • 全局变量在局部可以使用
    • 局部变量在局部分为内可以使用
    • 局部变量在全局范围内无法使用
  • LEGB原则
    • L-----local 局部名字空间
    • E-----enclosing 直接外围空间
    • G-----global 全局名字空间
    • B-----builtin 内建名字空间
复制代码
1
2
3
4
5
6
7
8
9
10
11
#in[1] #全局变量的运用 a1=2 #定义全局变量a1 def fun(): print(a1) a2=99 print("i am in fun") print(a2) #此处为局部变量 print(a1) fun()
复制代码
1
2
3
4
5
6
7
#out[1] 2 #从此行之后为fun()的结果 2 i am in fun 99
复制代码
1
2
3
4
5
6
7
8
9
10
11
#in[2] #若在全局输出局部变量会出现的情况 a1=2 #定义全局变量a1 def fun(): print(a1) a2=99 print("i am in fun") print(a2) #此处为局部变量 print(a1) print(a2)
复制代码
1
2
3
4
5
6
7
#out[2] 2 Traceback (most recent call last): File "E:统计python3.1.py", line 10, in <module> print(a2) NameError: name 'a2' is not defined

提升局部变量为全局变量

  • globals,locals函数
    - 可以通过globals和locals显示局部变量和全局变量
    - 参考一下案例
复制代码
1
2
3
4
5
6
7
8
9
#in【3】 a=1 b=2 def fun(c,d): e=111 print("Locals={}".format(locals())) print("Globals={}".format(globals())) fun(100,200)
复制代码
1
2
3
4
#out[3] Locals={'c': 2, 'd': 3, 'e': 111} Globals={'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'E:\统计\python\3.1.py', 'a': 1, 'b': 2, 'fun': <function fun at 0x000001E1680FC1E0>}

eval()函数

  • 把一个字符串当成表达式来执行,返回表达式执行后的结果
  • 语法:
    - eval(string_code,global=none,local=none)

exec()函数

  • 跟eval 用法一致不返回结果
    • exec(string_code,global=none,local=none)
复制代码
1
2
3
4
5
6
7
8
#in[4] x=100 y=100 z1=x+y z2=eval("x+y") print(z1) print(z2)
复制代码
1
2
3
4
#out[4] 200 200
复制代码
1
2
3
4
5
6
7
8
9
#in[5] #exec()范例 x=100 y=100 z1=x+y z2=exec("x+y") print(z1) print(z2)
复制代码
1
2
3
4
#out[5] 200 None

递归

  • 函数直接或者间接调用自己
  • 优点:简洁容易理解
  • 缺点:对递归深度有限制,消耗资源大
复制代码
1
2
3
4
5
6
7
8
#in【6】 x=0 def fun(): x+=1 print(x) fun() fun()
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#out[6] Traceback (most recent call last): File "E:统计python3.1.py", line 8, in <module> fun() File "E:统计python3.1.py", line 7, in fun fun() File "E:统计python3.1.py", line 7, in fun fun() File "E:统计python3.1.py", line 7, in fun fun() [Previous line repeated 975 more times] File "E:统计python3.1.py", line 6, in fun print(x) RecursionError: maximum recursion depth exceeded while pickling an object

注意递归的时候一定要注意递归次数,不要无限循环

复制代码
1
2
3
4
5
6
7
8
9
10
11
#in[7] #斐波那契 def f(n): if n == 1: return 1 if n ==2: return 2 return f(n-1)+f(n-2) for i in range(1,11) : print(f(i))
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
#out[7] 1 2 3 5 8 13 21 34 55 89

内置数据结构(变量类型)

  • list
  • set
  • dict
  • tuple
    list(列表)
    • 一组顺序的数据的组合
    • 创建列表
      • 空列表
复制代码
1
2
3
4
5
6
7
8
9
#in【8】 #创建空列表 l1=[] print(type(l1)) print(l1) l2=[1,2,3] print(type(l2)) print(l2)
复制代码
1
2
3
4
5
6
#iut[8] <class 'list'> [] <class 'list'> [1, 2, 3]

列表相关操作

  • 访问
    • 使用下标索引
    • 列表的顺序是从0开始的
  • 分片操作
    • 对列表任何一部分进行截取
    • l[:]
复制代码
1
2
3
4
5
#in[9] #访问列表中的数 l=[1,5,3,6,9,7,8] print(l[2])
复制代码
1
2
3
#out[9] 3
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
#in[10] #对列表进行截取 l=[1,3,4,5,6,9,78,5] #注意截取的范围,包含左边的下标值,不包含右边的下标值 print(l[2:5]) #下标为空时,截取所有 print(l[:]) #分片操可以控制增长幅度,默认幅度为1 print(l[1:6:2]) #下标可以超出范围,超出后不考虑多余的 #下标值可以为负数,为负数时表示顺序从右往左(从-1,-2,-3.。。。)
复制代码
1
2
3
4
5
#out[10] [4, 5, 6] [1, 3, 4, 5, 6, 9, 78, 5] [3, 5, 9]
复制代码
1
2
3
4
5
6
7
8
#in【11】 #分片操作之负数下标 l=[1,2,3,4,5,6,7,8] print(l[-6:-1]) #正常情况下左边的值要比右边的值小 #如果一定左边的要比右边的大,则步长一定要用负数,表示从右往左 print(l[-2:-5:-1])
复制代码
1
2
3
4
#Out[11] [3, 4, 5, 6, 7] [7, 6, 5]

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

  • 内置函数ID,负责显示一个变量或者数据的唯一确定编号
复制代码
1
2
3
4
5
6
7
8
9
#in【12】 #通过id可以直接判断出分片是从新生成的一份数据还是使用的同一份数据 l=[1,2,3,4,5,6] ll=l[:] #如果两个id值一样,则表明分片产生的列表是使用同一地址的相同数据 #否则,则表明分片是新生成了一份数据 print(id(l)) print(id(ll))
复制代码
1
2
3
4
#out[12] 2454745518216 2454745508872

最后

以上就是发嗲大山最近收集整理的关于python学习第六次的全部内容,更多相关python学习第六次内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(51)

评论列表共有 0 条评论

立即
投稿
返回
顶部