python模块化、文件操作、格式化输出、类和继承、作用域

模块化 from module import module.function

dir 返回模块内所有定义名称,以字符串列表形式返回

# __name__ 在此运行时为 __main__,不在此运行时为 文件名

print(__name__)
if __name__ == '__main__':
    print('程序在自身运行')
else:
    print('程序不在自身运行')


def add(a, b):
    return a + b

格式化输出,文件操作

import math
import sys
# open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
# 输入和输出,可使用 .format 进行传入数据
print('你好,{}。你{}岁了。'.format('小明', 18))

# 输入和输出,可使用 f'{var1}xxx{var2}' 传入var1 var2的值
name = '小红'
age = 16
print(f'你好,{name}。你{age}岁了。')

# 格式化小数 {0:.4f}保留四位小数,
print('π的近似值:{0:.4f}'.format(math.pi))

# 在 : 后传入一个整数, 可以保证该域至少有这么多的宽度。 用于美化表格时很有用。
table = {'Google': 1, 'R': 2, 'Ta': 3}
for k, v in table.items():
    print('{:10}===>{:10}'.format(k, v))

# 获取当前位置
print(sys.path[0])
# 文件读写 r r+ w w+ a a+
path = sys.path[0] + '\output.txt'
f = open(path, 'w')
f.write('python \n java \n C++')
f.close()
# 读文件
print('-' * 10)
f = open(path, 'r')
str1 = f.read()
print(str1)
f.close()
# 读一行
print('-' * 10)
f = open(path, 'r')
str1 = f.readline()
print(str1)
f.close()
# 读多行,以列表形式返回
print('-' * 10)
f = open(path, 'r')
str1 = f.readlines()
print(str1)
# 迭代读取
print('-' * 10, '迭代读取')
f = open(path, 'r')
for line in f:
    print(line, end='')

# 若果写入的不是字符串则需要转化
print('-' * 10, '写入其他类型数据')
f = open(path, 'w', encoding='utf8')
value = ('test', '测试')
s = str(value)
print(s)
f.write(s)

print(f.tell())

类和继承

创建类和创建实例

# 创建类的时候可声明__init__ 方法,在类被创建时候会执行
# 类中定义的全局属性可通过类名直接访问
# self代表类的实例,而非类
class MyClass:
    p = 0

    def __init__(self, x, i):
        self.x = x
        self.i = i

    def out_function(self):
        print(f'输出方法:x = {self.x}, i = {self.i}')


my_class = MyClass(x=12, i=1)
my_class.out_function()
# 通过类名直接访问属性
print(MyClass.p)


# self 不是 python 关键字,我们把他换成 runoob 也是可以正常执行的:
class MyClass2:
    def prt(runoob):
        print(runoob)
        print(runoob.__class__)


my_class2 = MyClass2()
my_class2.prt()

类的继承使用

class People:
    name = ''
    age = 0
    # 定义私有属性,私有属性外部无法访问
    __weight = 0

    def __init__(self, n, a, w):
        self.name = n
        self.age = a
        self.__weight = w

    def speak(self):
        print(f'{self.name}说:我{self.age}岁了,我{self.__weight}公斤。')


class Student(People):
    grade = 0

    def __init__(self, n, a, w, g):
        # 调用父类的初始化方法
        People.__init__(self, n, a, w)
        self.grade = g

    # 覆盖父类的方法
    def student_speak(self):
        # __weight 是私有属性,外部不能访问
        People.speak(self)
        print(f'我在{self.grade}年级。')


# 单继承
print('*' * 10)
p = People('张三', 20, 50)
p.speak()

print('*' * 10)
s = Student('李四', 25, 60, '三')
s.student_speak()
# 调用父类方法,使用super(child,c).method()
super(Student, s).speak()


# 多继承
class Speaker:
    name = ''
    topic = ''

    def __init__(self, name, topic):
        self.name = name
        self.topic = topic

    def speaker_say(self):
        print(f'我是{self.name},我演讲的题目是:{self.topic}。')


class StudentSpeaker(Student, Speaker):
    def __init__(self, n, a, w, g, t):
        Student.__init__(self, n, a, w, g)
        Speaker.__init__(self, n, t)

    def student_speaker(self):
        Student.student_speak(self)
        Speaker.speaker_say(self)


print('*' * 10)
ss = StudentSpeaker('王五', 25, 70, '五', '多继承类')
ss.student_speaker()

python作用域

# python 中只有模块(module),类(class)以及函数(def、lambda)才会引入新的作用域,
# 其它的代码块(如 if/elif/else/、try/except、for/while等)是不会引入新的作用域的,
# 也就是说这些语句内定义的变量,外部也可以访问

num = 1


def fun():
    # 使用全局变量
    global num
    print(num)
    # 改变里全局变量
    num = 123
    print(num)


def fun1():
    # 此时使用的是局部变量,不会对全局变量进行更改
    num = 456
    print(num)


# 嵌套情况下使用外部变量,使用nonlocal声明
def outer():
    test = 10

    def inner():
        # 声明使用nonlocal,即使用了外部变量 test = 10
        nonlocal test
        test = 100
        print(test)

    inner()
    print(test)  # 此时test已经被inner内部更改


fun()
print('*' * 10)
print(num)

print('-' * 20)
fun1()
print(num)

print('-' * 20)
outer()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值