python基础学习第二篇~

IDE : 集成开发环境(pycharm,vscode等)
python通过缩进来分段的,spyder默认了一个Tab是4个空格,每4个空格就相当于一个{
在这里插入图片描述
python中无switch,可以用字典或者if…elif…elif…elif…的方式代替switch

# if True:
#     pass#空语句/占位语句
print('please input a :')
#a=input()
#这个a其实是字符串
#因为python是一种动态语言,不提前声明变量类型!而且不报错!
a=int(input())
if a==1:
    print('apple')
elif a==2:
    print('banana')
elif a==3:
    print('orange')
else:
    print('shopping')
#主要用来遍历/循环 序列/集合/字典
# =============================================================================
# a=[['apple','orange','banana','grape'],(1,2,3)]
# for x in a:
#     for y in x:
#         if y == 'orange':
#             break
#         print(y)
# #        print(y,end=' ')#默认是竖着输出的,加end就横着输出了
# else:
#     print('T^T fruit has gone')
# =============================================================================
    
#a=[1,2,3]
#
#for x in a:
#    if x==2:
#        break#直接跳出循环,以后也没了
##        continue#跳出本次循环,进行下一次循环
#    print(x)
#else:
#    print('EOF')

# =============================================================================
# for x in range(0,10,2):
#     print(x,end=' | ')
# for y in range(10,0,-2):
#     print(y,end=' | ')
# =============================================================================

a=[1,2,3,4,5,6,7,8]#输出1,3,5,7
#for x in range(0,len(a),2):
#    print(a[x])
b=a[0:len(a):2]
print(b)
# -*- coding: utf-8 -*-
'''这是我的第一个python程序~
print('hello python')'''
# =============================================================================
# 一段小程序
# =============================================================================
ACCOUNT='qubo'
PASSWORD='0000'
flag=0#标记输入是否完全正确,
while flag==0:
    print('please input account')
    user_account=input()
    print('please input password')
    user_password=input()
    
    # =============================================================================
    # if ACCOUNT==user_account :
    #     if PASSWORD==user_password:
    #         print('loading--successfully!')
    #     else:
    #         print('wrong password!')
    # else:
    #     print('wrong account!')
    # =============================================================================
    if ACCOUNT==user_account and PASSWORD==user_password:
        print('loading--successfully!')
        flag=1
    else:
        print('wrong password or account!')

包和模块

spyder在新建工程后,建包和模块的区别在新建时就可以体现
建包:
在这里插入图片描述
_init_.py本身就有
在这里插入图片描述
圈起来的为自动生成的自解码(字节码?)文件,貌似调用一次包就会生成一个(有待我考证)…
test1,test2,test3均为模块,只不过test3和test1,test2不在一个包(即文件夹)中,不在同一个包中的模块可以重名。

#引入包方法1
import pkg1.test1 as m#导入模块
print(m.a)

#引入包方法2
from pkg1.test1 import a#导入具体变量
print(a)

#也可运行
from pkg1 import test1
print(test1.a)

代码一行太长了可以通过()来换行,或者末尾加 \ (不推荐)

关于_init_.py文件

#可以用来初始化、引入多个公用的包
#不论是引用_init_.py文件所在的包还是同级文件
#均自动执行
#__all__=['test1']#限制使用哪几个模块
print('this is init file')

python中一旦导入某个模块,就会执行该模块的代码,如:
在这里插入图片描述
f1.py

a=1

f2.py

b=2
print(b)

f3.py

from f2 import b

run f3.py 结果:
在这里插入图片描述
包和模块是不会重复导入的,避免循环引用包

函数

特点:

  1. 功能性
  2. 隐藏细节
  3. 避免编写重复代码

显示python之禅:命令行输入 import this
函数无return的话默认返回None
python一行一行的执行代码

必须参数、关键字参数、默认参数

# -*- coding: utf-8 -*-
def damage(skill1,skill2):
    damage1=skill1+1
    damage2=skill2*3
    return damage1,damage2

#序列解包
skill1_damage,skill2_damage=damage(1,2)
print(skill1_damage,skill2_damage)

#关键字参数--增强代码可读性--可以不尊重顺序
s1,s2=damage(skill2=3,skill1=5)
#默认参数,直接给形参赋值,用于大部分信息都相同的情况
#不一样信息的按照必须参数的样式直接传值
#定义函数、调用函数时必须参数必须在前面,默认参数必须要跟在最后面
#如果要在一堆默认参数中指定一个值,用关键字参数赋值!

#类的最基本的作用就是封装
class Student():
    name='小黑'
    age=0#类变量
    #行为与特征(方法与变量)
    #类变量 vs 实例变量
    def __init__(self,name,age):#构造函数,实例化时自动调用,只能返回None
       #初始化对象特征
       self.name=name#这个self可以任意改名,但必须有,建议用self,代表实例
       self.age=age#self.age是实例变量
      # print(type(self))
                
stu1=Student('小明',18)#类的实例化,不需要new
print(stu1.name,stu1.age)

实例方法、类方法、静态方法

# -*- coding: utf-8 -*-
#类的最基本的作用就是封装
class Student():
    sum=0
    name='小黑'
    age=0
    def __init__(self,name,age):#构造函数,实例化时自动调用,只能返回None
       self.name=name#这个self可以任意改名,但必须有,建议用self,代表实例
       self.age=age#self.age是实例变量
       
    def do_homework(self):#实例方法
        print(self.name+' do homework')
        
    @classmethod#装饰器
    def plus_sum(cls):#类方法,可同时被对象和类调用 
        cls.sum+=1
        print(cls.sum)
        
    @staticmethod#静态方法,可同时被对象和类调用 ,尽量不用  
    def add(x,y):
        print('this is a static method~')
        
stu1=Student('小明',18)
Student.plus_sum()
stu1.add(1,2)
Student.add(1,2)
#stu2=Student('小花',18)
#Student.plus_sum()



给方法前加__(双下划线),python认为是私有的(private)
构造函数(_init_)除外,因为后面还有__ ~~~~小tips

class Student():
    sum=0
    
    def __init__(self,name,age):
       self.name=name
       self.age=age
       self.__score=0#__代表是私有的属性,python就会创建一个叫做_Student__score的属性,而并不是我们以为的__score
     
    def marking(self,score):
        if score<0:
            return'不能给别人评负分'
        self.__score=score
        print(self.name+"本次考试分数为:"+str(self.__score))
       
    def do_homework(self):
        self.do_english_homework
        print(self.name+' do homework')
        
    def do_english_homework(self):
        pass
        
    @classmethod
    def plus_sum(cls):
        cls.sum+=1
        print(cls.sum)
        
    @staticmethod 
    def add(x,y):
        print('this is a static method~')
        
stu1=Student('小明',18)
stu2=Student('小花',18)
#Student.plus_sum()
result=stu1.marking(59)
stu1.__score=1#利用python动态属性,添加了一个新的实例变量__score,但其实本来是没有这个变量的
#print(stu1.__score)#不报错
print(stu1.__dict__)

#print(stu2.__score)#报错
print(stu2.__dict__)

结果:
如果print(stu2.__score)
在这里插入图片描述
通过__dict__查看两个对象内部的具体值的情况:
在这里插入图片描述
python对私有变量的保护机制:_Student__score为init函数初始化时真正的属性值,而__score为python检测到我要给这个东西赋值,自己动态加的一个变量…(其实就是把原来私有变量的名字给改了)

继承

父类:

class Humen():
    sum=0
    def __init__(self,name,age):
         self.name=name
         self.age=age
         
    def get_name(self):
        return (self.name)
    
    def do_homework(self):
        print('this is parent method!')

子类:

from t2 import Humen
class Student(Humen):#继承

    def __init__(self,school,name,age):
        self.school=school
        #Humen.__init__(self,name,age)#不加self报错
        #类调用实例方法,和本质初始化是不一样的
        #缺点:当要换父类时,所有原父类名字都要改(开闭原则)
        super(Student,self).__init__(name,age)#优先考虑用super
      
    def do_homework(self):#实例方法
        super(Student,self).do_homework()
        print(self.name+' do homework')
        
stu1=Student('喵喵小学','小花',20)
stu1.do_homework()

结果:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值