1.函数定义
完成特定功能的一个语句组,可重复使用的,用来实现单一,或相关联功能的代码段,
通过调用函数名来完成语句组的功能
为什么使用函数
1)把程序模块化,减少编程的难度;
2)一次编写,代码重用;
2.函数分类
2.1系统自带函数
Python内嵌的函数(如abs()、len(),input())、 Python标准库中的函数(如random库中的random(), math库中的sqrt(),pow()))等
常用的标准库有 sys模块, os模块, fileinput模块, time 模块, math模块,random模块,turtle 模块
os模块主要是与操作系统的交互; 包括获取当前用户、管理员权限、文件夹、文件等权限的修改
import os print(os.getcwd()) # 得到当前目录 os.chdir('E:\\') # 改变当前目录,注意windows下用到转义 print(os.getcwd()) print(os.getlogin()) #得到用户登录名称 print(os.getenv('SystemRoot')) #得到环境变量 #os.putenv() # 设置环境变量 os.system('cmd') # 利用系统调用,运行cmd命令
path模块
import os,time print(os.path.getsize('C:\\Log\\Config.ini')) #获取文件大小 print(os.path.isfile('C:\\Log\\Config.ini') ) #判断是否为文件 print(os.path.isdir('C:\\Log\\Config.ini')) #判断是否为目录 print(os.path.samefile('C:\\Log\\Config.ini', 'C:\\Log\\202002.txt')) #判断是否为同一个文件 print(os.path.abspath('C:\\Log\\Config.ini')) #获取绝对路径 print(os.path.dirname('C:\\Log\\Config.ini')) #获取目录 print(os.path.exists('C:\\Log')) #判断指定目录是否存在 print(time.ctime(os.path.getatime('C:\\Log\\Config.ini'))) #获取最近一次访问时间
#获取当前目录
import os print(os.getcwd()) #获取当前目录 print(os.path.dirname(os.getcwd())) #获取当前目录的父目录 import pathlib print(pathlib.Path.cwd()) #获取当前目录 print(pathlib.Path.cwd().parent) #获取当前目录的父目录
2.2自定义函数
def <function_Name> (<Parameters>): <function_body>
函数名:可以是任意有效的python标识符;
参数列表:是调用函数时传递给它的值(可以由多个、一个、或者0个参数组成,当有多个参数时,参数与参数之间用逗号分隔)
参数分为:
1)形参:定义函数时,函数名后面圆括号中的变量,简称“形参”,形参只在函数内部有效;
2)实参:调用参数时,函数名后面圆括号中的变量,简称“实参”;
有3个需要注意的地方:
- 函数名后面必须加冒号
- 如果函数体和def不在同一行,则必须缩进
- return指定函数返回值,用来结束函数, 但return语句是可有可无的,
如果不给return,则等价于加上了return None
,即函数默认返回None结构如果函数体body语句只有一行,或者可以简写为一行,则可以写在def的同行
2.3函数使用示例
2.3.1 普通参数
def add1(x,y): return x+y add1(4,6)
2.3.2 带有默认参数
def add2(x,y=100): return x+y add2(8)
2.3.3 动态参数
1)* 带参数
表示可以传无限的参数,传入的参数会自动拼接,当不传参数时会拼成空元组(tuble)
不穿参数 ---> () 传一个参数11 ---> (11,) ---> 逗号用于区别元祖跟普通的常量 传两个参数11,22 ---> (11,22)
def dymynic_para_func(*para): print(para) dymynic_para_func(11) dymynic_para_func(11,22) dymynic_para_func(11,'a','b')
2)** 带参数
表示可以传无限的参数,传入的参数会自动拼接成map(python中称为字典)
def dynamic_para_func(**para): print(para) dynamic_para_func() print("******************************") dynamic_para_func(a=3) print("******************************") dynamic_para_func(a=3,b=4)
3)*, 带参数——具名参数
通过使用 *
操作符来匹配所有占位参数,然后在 *
之后指定可选的键值参数,你可以创建一个接收任意数量的占位参数和特定数量的键值参数的函数。
def sum_numbers(*numbers,initial=0): total=initial for x in numbers: total += x return print(total) sum_numbers() sum_numbers(1) sum_numbers(2,3,1)
如果要限制关键字参数的名字,就可以用命名关键字参数,例如,只接收city和job作为关键字参数。
命名关键字参数需要一个特殊的分隔符*
,*
后面的参数被视为命名关键字参数
。
命名关键字参数必须传入参数名,这和位置参数不同
def person(name, age, *, city, job): print(name, age, city, job) person('city', 21, city='Beijing', job='IT')
下面参数的名称是必须的,但是可以在不同的顺序和位置
from math import sqrt def quadratic(a, b, c): x1= -b / (2*a) x2 = sqrt(b**2- 4*a*c)/(2*a) return (x1 + x2), (x1 - x2) print(quadratic(b=93,c=62,a=31)) print(quadratic(a=31,b=93,c=62))
2.4 self参数
在类中的方法,指向该对象本身的参数,类似this
class Rectangle: def __init__(self, width, height): self.width = width self.height = height def area(self): return self.width * self.height rec=Rectangle(10, 50) print(rec.area())
class Person: def __init__(self, name): self.name = name def sayHello(self): print("Hello, my name is," + self.name) p = Person("Jimmy") p.sayHello()