Python学习(包括:高阶函数,局部变量与全局变量,阶乘函数,递归,嵌套函数,文件操作,类和对象,单例模式,异常等)

#coding:utf-8

def func1(a,b):
    sum=a+b
    # return a,b   #二元组 ()可以省略, 一元组 a =(500,)
    return sum # 不写return没有返回值 ,返回多个值,需要借助集合

# print(func1(100,200))
c=300 # 全局变量
a=100
list2 =[1,2,3]
def func2():
    # a=200 #局部变量 ,从新定义一个局部变量(局部变量和全局变量的名字相同)
    list2.append(4) # 修改全局变量的值,根据全局变量是否是可变类型
    # 任何的全局变量(不管全局变量是什么类型)在函数中都是可以改变引用 ,需要global
    global a
    a=200
    print("函数里面的",a)

# func2()
# print(a)
# print(list2)

def func3(a,b=100): # 缺省的形参一定是在普通形参后面
    return a+b

# print(func3(2,300))

def func4(a,d=666,*b,**c): # 不定长形参一定在最后面
    print(b)
    print(c)
# func4(1,100,300,400,i=1000,j=3000)


def test1(a,list2=[1,3]):
    list2.append(a)
    return list2

# print(test1(100)) # [1,3,100]
# print(test1(200,[3,4])) # [3,4,200]
# print(test1(300)) # [1,3,100,300]

# 阶乘函数 ,递归函数
def test2(n): # 递归函数本质就是一个循环,必须要有循环的边界
    if n<=1:
        return 1
    else:
        return n * test2(n-1)
# print(test2(6))

# 嵌套函数, 计算一个长度为n的斐波拉契数列 [1,1,2,3,5,8,....]

def test3(n=2):
    arr=[1,1]
    def get_num(i): # i 代表数列中某个数字的下标
        if i<=1:
            return 1
        else:
            return arr[i-1] + arr[i-2]

    for i in range(2,n):
        arr.append(get_num(i))
    return arr
# print(test3(10))

# 高阶函数
def test4(n,f):
    return f(n)
# print(test4(6,test2))

def test5(a,b,f):
    return f(a,b)
print(test5(100,200,lambda x,y:x+y)) # lambda 形参:表达式

#coding:utf-8

# 打开一个文件获得IO流
# inp=open(r"E:\test1",'r') # r"E:\test1" 里面的r代表不去解析转义符
# out =open(r"E:\test5","w")
# out.write(inp.read())
# out.close()
# inp.close()

import os

def changeFile(file):
    if os.path.isdir(file):
        filelist=os.listdir(file)
        for f in filelist:
            changeFile(os.path.join(file,f))
    else:
        if file.endswith(".txt"):
            index=file.rfind(".txt")
            source_file_name=file[:index] # 不包含后缀的原始文件文件路径
            new_file_name=source_file_name+"_backup"+".txt" # 新文件名
            os.rename(file,new_file_name)

changeFile(r"E:\zhangsan")

#coding:utf-8
class Person(object):

    def __init__(this,name,age):  # 初始化的函数,第一个形参必须是self(代表当前对象),调用函数之前,对象已经创建
        this.name=name # 成员属性(对象属性)
        this.age=age

    def work(self): # 任何一个成员函数,第一个形参是固定的
        print("%s正在工作"%self.name)

    def __new__(cls, name,age): # 创建对象的时候调用的函数,1、返回值是当前对象,2、第一个形参是固定的代表当前的类,其他形参和init一样
        # java 中 class.newInstance()
        return object.__new__(cls)
    def __str__(self): # 相当于java中toString
        return "姓名:%s,年龄:%d"%(self.name,self.age)

    def __del__(self):
        print("对象被垃圾回收之前调用")
# p =Person("zs",34) # None
# p.work()
# print(p)
# p2=p
# del(p)
# print("程序结束")

class A:
    def test1(self):
        print("A 类的test1函数")


class B:
    def test1(self):
        print("B 类的test1函数")

class C(B,A):
    def test1(self):
        print("C 类的test1函数")

# c =C()
# c.test1()
# print(C.mro())

class Animal(object):
    name="小猫" # 类属性

    def __init__(self,type):
        self.__type=type
    @classmethod
    def test1(cls):
        print("类方法")

    @staticmethod
    def test2():
        print("静态函数")

    def work(self):  # 任何一个成员函数,第一个形参是固定的
        print("%s正在工作" % self.__type)
print(Animal.name)
a =Animal("猫科")
Animal.test2()
# print(a.__type)

#coding:utf-8
class Dog(object):
    __instance=None

    def __new__(cls):
       if cls.__instance==None:
           cls.__instance=object.__new__(cls)
       return cls.__instance

d1 =Dog()
d2 =Dog()
print(d1==d2)
 

#coding:utf-8
try:
    i=1/0
    print("bjsxt")
except TypeError as ex:
    print(ex)
finally:
    print("不管有没有异常都执行")
print("hello")
Python学习(包括:高阶函数,局部变量与全局变量,阶乘函数,递归,嵌套函数,文件操作,类和对象,单例模式,异常等)