# python学习笔记(二)--函数和异常处理

函数

回顾return

return作为一个返回值 可以将函数内部我想要返回的值 进行返回 如果有返回值的函数 在调用的时候不会有任何的输出 需要使用输出函数进行输出

如果在函数中 遇到了return那么return下面的代码 将不会在执行 也就是说 遇到了return认为函数已经执行完毕

一变量的作用域

(1)全局变量

在函数外部声明的变量为全局变量, 在函数内外部都可以获取到

name = '张三'
myList = ['x', 'y']

def demo():
    print(name)
    print(myList)

demo()

(2)局部变量

在函数外部声明为全局变量, 在函数内外部都可以获取到

# 局部变量 在函数外部获取不到
def demo():
    name = '张三'
    myList = ['x', 'y']

demo()
print(name)  # name 'name' is not defined
print(myList)

(3)关键字global声明函数内外使用同一个变量

name = '张三'
def demo():
    global name
    print(name)
    name = '李四'
print(name)
demo()
print(name)

(4)关键字nonlocal

在函数嵌套的时候 可以获取外层函数的变量 函数内外部都使用的同一个变量

def demo1():
    num = 1
    def demo2():
        # print(num)
        nonlocal num
        num = 2
    demo2()
    print(num)

demo1()

(5)可变类型 不可变类型

可变类型: 比如列表 你只是修改了列表中的某一个值 但是本省没有动

不可变类型: 比如字符串, int当你在给一个新的值得时候 那么原来的值会被丢弃 那么原来的值会被丢弃那么回生成一个新变量

myList = ['a', 'b', 'c', 'd']
myInt = 3

def demo():
    myList[0] = 'f'
    myInt = 10

demo()
print(myList)  # 可变类型内外使用都已一样 不需要加global
print(myInt)

二递归函数

递归函数就是自己调用自己的过程

优点:代码简短

缺点:代码不好维护 大量消耗cpu

def demo(n):
    print(n)
    if n > 1:
        demo(n - 1)
    print(n)
# demo(5)

# 分开的写法
def func1(n):
    print(n)
    func2(n - 1)
    print('func1', n)

def func2(n):
    print(n)
    func3(n - 1)
    print('func2', n)

def func3(n):
    print(n)
    print('func3', n)

func1(3)

三 特殊的问题

a = 10
def demo():
    a = a + 1
等同于:
a = 10
def demo():
    print(a)
    a = 10

demo()  # local variable 'a' referenced before assignment

四 函数的导入

# import myfunc.returnfunction
# print(myfunc.returnfunction.demo(10, 20))
# from myfunc import returnfunction  # 从myfunc的文件夹中导入returnfunction
# print(returnfunction.demo1(10, 20, 30))

# from myfunc import returnfunction as func # 从myfunc文件夹导入
# # returnfunction as func 起别名
# print(func.demo1(10, 20, 30))

import random as ran
ran.randint(1, 10)

五列表推导式

概念:

列表推导式提供了创建列表的简单途径

简单的列表

myList = [x for x in range(1, 5, 2)]

带if过滤的

# 偶数
myList1 = [x for x in range(1, 50) if not(x % 2)]
# 小于30的偶数
myList2 = [x for x in myList1 if x < 30]
# 把列表中小于30的数 依次加1
myList2 = [i+1 for i in myList1 if i < 30]
print(myList2)

列表的嵌套:

lis = []
for i in range(1, 11):
  for x in range(1, 4):
    lis.append([i, x])
  print(lis)

六迭代器

可迭代对象

可以直接作用于for循环的对象称为可迭代对象(Iterable)可以使用isinstance判断是否为可迭代对象

可用于for循环的数据类型

list  string dict set tuple 

判断是否为可迭代对象需要引入Iterable进行判断

from collections import Iterable
# 判断是否为可迭代对象
print(isinstance([], Iterable))
print(isinstance({}, Iterable))
print(isinstance('', Iterable))
print(isinstance(1, Iterable))

迭代器

  1. 迭代器是从对象的第一个元素开始访问, 只能前进 不能后退
  2. 迭代器由两个方法iter() next() (iter是将可迭代器对象转换成迭代器, next是可以将迭代器的元素一个一个访问)
  3. 当迭代器的元素都访问以后 再次访问会报StopIteration的错误

七生成器

使用yield函数称为生成器

生成器也是先了迭代器的功能

使用列表生成式 这样生成出来的(x for x in range(1, 5))是生成器 并不是像列表一样一个一个的生产 而是用一个 产一个

使用(x for x in range(1, 5))创建列表的好处

节约资源

# 对比节约资源
# myGener = (x for x in range(100000))
# print('就是这么速度')
myGener = [x for x in range(100000)]
print('你在看看我的速度')

加上yield的函数(调用一次 执行一次 避免一次性全部执行完毕 节约电脑资源)

配合

yield

next()

def demo():
    print('a')
    yield
    print('b')
    yield
    print('c')
    yield

def func():
    for i in range(100):
        print(i)
        yield
myGen = func()
next(myGen)
next(myGen)

八异常处理

  1. 需求: 当程序出现问题时不让程序结束 而是越过错误继续执行
  2. 一个try语句可以包含多个except子句 分别来处理不同的异常 最多只是一个分支会执行
  3. 一个except子句可以包含多个异常 这些异常的名称放在括号里 或者称为元组里

主体结构

try:
    # 可以会发生异常的代码
except:
    # 处理出现的异常

(1)捕获一个特定的异常处理

# 捕获一个错误的异常处理
try:
    1 + 'a'
except TypeError as e:
  print(e)

(2)一个try语句对应多个except子句

# 一个try语句对应多个except子句
try:
    # 1 + 'a'
    int('a')
except TypeError as e:
    print(e)
except ValueError as v:
    print(v)

(3)一个except子句 捕获特定的n个异常

# 一个except 字句 捕获特定的n个异常
try:
    # 1 + 'a'
    int('a')
except (TypeError,ValueError) as e:
    print(e)

(4)可选的else字句

如果想使用else子句, 必须放在except之后 这个子句将在try语句没有任何异常的时候去执行

格式:

try:
    ……
except:
    ……
else:
    ……

try:
    # 1 + 'a'
    # int('a')
    1 + 1
except (TypeError,ValueError) as e:
    print(e)
else:
    print('只有在没有任何异常的情况下,才能看到我')

(5)finally

finally子句  有没有异常 都会去执行

# 配合finally语句的执行
try:
    # 1 + 'a'
    int('a')
    # 1 + 1
except (TypeError,ValueError) as e:
    print(e)
else:
    print('只有在没有任何异常的情况下,才能看到我')
finally:
    print('你有没有异常我都执行')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值