python学习 --- 基础语法

模块

导入模块

在 python 用 import 或者 from...import 来导入相应的模块。

import

将整个模块导入可以使用import,import后面的名字必须是包名,在使用函数时也必须带上包名

from somemodule import

  • 格式为:from somemodule import firstfunc, secondfunc, thirdfunc
  • 通过from格式导入的模块不必再使用包名,import后的名字既可以是包名,也可以是函数名
  • 将某个模块中的全部函数导入,格式为: from somemodule import *

导入并定义别名

from os import path as p
import os.path

相对路径导入

如果引用的是同项目中的模块,也可以使用相对路径

import sound.effects.echo
import sound.effects.surround
from sound.effects import *

目录只有包含一个叫做 init.py 的文件才会被认作是一个包

模块属性

__name__属性

每个模块都有一个__name__属性,当其值是'main'时,表明该模块自身在运行,否则是被引入。因此这个属性常用于区分module是自身在运行还是在被引入后运行。

if __name__ == '__main__':
   print('程序自身在运行')
else:
   print('我来自另一模块')

dir()方法

打印出模块内定义的所有名称,如果不传入参数,则打印当前模块下的所有名称。

异常处理

处理异常

try:
  print(x)
except NameError:
  print("Variable x is not defined")
except:
  print("Something else went wrong")
else:
  print("Nothing went wrong")
finally:
  print("The 'try except' is finished")

抛出异常

使用raise抛出异常。如果你只想知道这是否抛出了一个异常,并不想去处理它,那么一个简单的 raise 语句就可以再次把它抛出。

try:
    raise NameError('HiThere')
except NameError:
    print('An exception flew by!')
    raise

预定义的清理行为

有些对象预定义了清理行为,对于这些对象使用with关键字可以就避免定义finally,这样使代码更简洁

with open("myfile.txt") as f:
    for line in f:
        print(line, end="")

函数

默认参数

调用函数时,如果没有传递参数,则会使用默认参数

关键字参数

使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值。

  • 当星号单独出现时,星号后面的参数强制使用关键字参数形式
def f(a,b,*,c):
    return a+b+c
f(1,2,3)   # 报错
#Traceback (most recent call last):
#  File "<stdin>", line 1, in <module>
#TypeError: f() takes 2 positional arguments but 3 were given
f(1,2,c=3) # 正常
#6

不定长参数

  • 加了星号的参数会以元组形式导入
def printinfo( arg1, *vartuple ):
   "打印任何传入的参数"
   print ("输出: ")
   print (arg1)
   print (vartuple)
 
printinfo( 70, 60, 50 ) 
# 70
# (60, 50)
  • 两个星号的参数会以字典形式导入
def printinfo( arg1, **vardict ):
   print ("输出: ")
   print (arg1)
   print (vardict)
 
printinfo(1, a=2,b=3)
#1
#{'a': 2, 'b': 3}

强制位置参数(python3.8)

def f(a, b, /, c, d, *, e, f):
    print(a, b, c, d, e, f)
f(10, 20, 30, d=40, e=50, f=60)
f(10, b=20, c=30, d=40, e=50, f=60)   # b 不能使用关键字参数的形式
f(10, 20, 30, 40, 50, f=60)           # e 必须使用关键字参数的形式

匿名函数

lambda [arg1 [,arg2,.....argn]]:expression

sum = lambda arg1, arg2: arg1 + arg2
print ("相加后的值为 : ", sum( 10, 20 ))

面向对象

  • 使用class关键字表示类
  • 支持多继承,多个父类有相同方法时,按从左到右的顺序查找
  • 私有的变量或方法用双下划线开头
  • python保留了很多首尾都是双下划线的特殊方法,重写了这些特殊方法就可以间接的实现了对应的内置方法或运算符重载
  • 所有的类方法的第一个参数必须是self,用于表示对象本身,相当于java中的this
#!/usr/bin/python3
 
class Parent:        # 定义父类
   def myMethod(self):
      print ('调用父类方法')
 
class Child(Parent): # 定义子类
   def myMethod(self):
      print ('调用子类方法')
 
c = Child()          # 子类实例
c.myMethod()         # 子类调用重写方法
super(Child,c).myMethod() #用子类对象调用父类已被覆盖的方法
posted @ 2020-12-04 14:18  郑晓悦  阅读(89)  评论(0)    收藏  举报