python中基例_Python python从入门到实践(5) --代码复用

函数、类与代码复用

代码复用的思想

把代码当成资源进行抽象。

代码资源化:程序代码是一种用来表达计算的"资源"

代码抽象化:使用函数等方法对代码赋予更高级别的定义

代码复用:同一份代码在需要时可以被重复使用

函数和对象是代码复用的主要形式,对象化的抽象程度更高

模块化设计、分而治之:模块内部紧耦合(交流多、不可独立);模块之间松耦合(交流少、可独立)

函数

函数的定义

函数实例:

def do_something():

"""这是函数注释"""

print("Hello World!")

do_something()

def进行函数定义,接下来是函数名,括号内是参数表,随后是:下一行进行函数体,三对引号是文档注释。像c_like语言一样调用函数

使用参数的函数:

def do_something(name):

"""这是注释"""

print("Hello "+name.title()+"!")

do_something()

这里参数没必要指出类型

传递实参:函数传递实参的方式很多,可使用位置实参,这要求实参顺序与形参顺序对应,也可使用关键字实参,其中每个实参都由变量名和值组成;此外,还可以使用列表和字典。

位置实参:调用函数时,python会将每一个实参都关联到函数定义的一个形参,最简单的关联方式是基于实参的顺序,这种关联方式被称为位置实参

#定义函数

def describe_pet(animal_type, pet_name):

"""显示宠物信息"""

print("\nI have a "+animal_type+" and its name is " + pet_name.title()+".")

#调用函数, 实参按照一定顺序赋值给形参

describe_pet('hamster', 'harry')

describe_pet('dog','pearl')

关键字实参:传递给函数的名称-值对,直接在是惨重将名称和值关联,无所谓顺序

#调用函数,按照关键字传递实参

describe_pet(animal_type='hamster', pet_name='harry')

describe_pet(animal_type='dog',pet_name='pearl')

默认值:在定义函数时,添加默认值,当没有合适的实参传入时,将会使用默认值版本(写法同c++),要求也与c++相同,要求带有默认值的形参放在最后

通过给某个形参赋值空初始值'',可以实现可选参数的功能

返回值:值得注意,python没有必要定义函数时说明有无返回值和返回值类型。返回简单值、字典都可以;返回一个值、多个值、零个值都可以。返回多个值的时候会以元组的方式返回。

~~~ python

def get_formatted_name(first_name,last_name):

full_name= first_name + ' ' + last_name

return full_name.title()

def get_formatted_name_dic(first_name,last_name):

person = {

'first': first_name,

'last': last_name

}

return person

musician = get_formatted_name('zhao','siqi')

print(musician)

~~~

传递列表

def greet_users(names):

"""to greet"""

for name in names:

msg = 'Hello, ' + name.title() + '!'

print(msg)

usernames['A', 'B', 'C']

grret_users(usernames)

在函数中修改列表:列表传递给函数后,函数就可以对其进行修改,在函数中对列表的修改是永久性的

禁止函数修改列表:将列表的副本传递给函数,比如function_name(list_name[:])

传递未定数量的实参:

有时不知道函数需要接受多少实参,于是使用可变形参*或**其中前者创建了一个内容可变的空元组,后者创建了内容可变的空字典

def make_pizza(*topping):

print(toppings)

make_pizza('Chicken')

make_pizza("mushroom", "Chicken", "beef")

这里的*topping创建了一个空元组,并将收到的所有值都封装到元组中

同时使用位置形参和任意数量形参:位置形参应该位于任意数量形参之前

同时使用关键字形参和任意数量形参:一般使用关键字形参和任意数量形参时都使用了空字典

def build_profile(first, last, **user_info):

profile={

'first_name': first,

'last_name': last

}

for key, value in user_info:

profile[key] = value

return profile

user_profile = build_profile('albert','einstein', location = 'German', field = 'physics')

print(user_profile)

将函数储存在模块中

将函数存储在被称为模块的独立文件,再将模块导入(import)到主程序(注:模块也是.py文件)

导入整个模块:

import

随后的调用函数:

modele_name.function_name(...)

导入某个函数

from import,

使用as指定别名

from import as new_name

使用as给模块指定别名

import as

导入模块的所有函数

from module_name import*

调用函数时不必加模块名.

局部变量和全局变量:

(这里局部变量会在离开作用域时自动释放)

基本数据模型,无论是否重名,局部变量与全局变量不同:

即发生了作用域和可视性的覆盖

可以通过global关键字声明全局变量

经过实验,global声明的变量可以在局部作用域内使用、修改,且会修改原始的全局变量。并且在函数内使用global关键字可以创建原来并不存在的全局变量

def func():

global num

num = 9

return num

t = func()

m = num

print(str(t))

print(str(m))

print(str(num))

# 输出

# 9

# 9

# 9

对于组合数据类型,如果局部变量未创建,那么就会使用全局变量

lambda函数:

lambda函数是一种匿名函数,使用Lambda保留字定义,不指定函数名,函数名即为赋值的变量(类似于创建了一个函数指针,将指针赋给了某变量,随后该变量可当作函数名正常使用),一般仅仅定义简单的,能够用一行表示的代码,常常用于大型函数的函数对象使用

# 基本形式

= Lambda :

# 例子

add = Lambda x, y : x+y

函数编写时的注意细节:

命名只使用小写字母和下划线

包含带有对功能简易说明的注释

给形参指定默认值时等号两侧不要加空格

所有import都要放在(除了)注释外的最前面

定义函数的代码块后加两行空行与其他部分分开

函数递归

关键特征:

链条:计算过程中存在递归链条

基例:存在一个或多个不需要再次递归的基例

核心编写方法在于分支语句对参数进行判断,分别处理基例和链条

类和对象

根据约定,在python中,首字母大写的名称指的是类(即是命名规则,也是使用提示)

创建和使用类:

class Dog():

def __init__(self, name, age):

self.name = name

self.age = age

def sit(self):

print(self.name.title() + "is sitting")

类中的函数称为方法,与普通函数的唯一区别在于调用的方式,通过对象.方法名(参数表)的方式调用

__init__()是一种特殊的函数(构造函数),创建实例时自动调用

形参self必不可少,且必须位于其他形参最前面,但是调用时不必传递实参,因为它自动指向实例本身的引用

使用类

# 已经定义好Dog类

#创建实例

my_dog = Dog("A", 3)

#访问属性

print("My dog's name is "+my_dog.name.title())

#调用方法

my_dog.sit()

给属性指定默认值:在构造函数(__init__)指定这种初始值,此时不必在形参表中写出

修改属性的值:

通过访问成员直接修改属性的值

定义成员函数修改属性的值

继承

子类的构造函数

class Dog():

#略

class My_dog(Dog):

def __init__(self, name, age, weight):

super().__init__(name, age)

self.weight = weight

通过super()获取父类的引用,随后借助父类的构造函数完成构造

重写父类的方法:在子类中定义一个与父类中同名的方法,此时会直接调用子类的同名方法

将实例用作属性:使用代码模拟实物时,类中的属性和方法可能会越来越长,此时将类的一部分作为一个独立的类提取出来,将大型类拆分成多个协同工作的小类

导入类:与导入函数的操作基本相同

Python标准库:

Python标准库是一组模块,安装的python都含有它

例题:使用collections的一个类——OrderedDict,这是一个有序字典,在保存键值对关系的同时保留顺序

from collections import OrderedDict

favorite_languages = OrderedDict()

favorite_languages['Jen'] = 'python'

favorite_languages['Sarah'] = 'c'

favorite_languages['edward'] = 'ruby'

favorite_languages['phil'] = 'python'

for name.language in favotite_languages.items():

print(name.title() + "like " + language + ".")

类编码风格

类名实施驼峰命名法,将每个单词的首字母大写,不适用下划线,实例名和模块名使用小写,并在单词之间加下划线。

每个类在定义后使用文档注释描述类功能

在需要同时导入标准库和编写的自定义模板时,先import标准库,空行,再import自定义库

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/245120.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux查看硬盘smart_Linux检测磁盘坏道工具用什么命令

请关注本头条号,每天坚持更新原创干货技术文章。如需学习视频,请在微信搜索公众号“智传网优”直接开始自助视频学习1. badblock命令简介badblock命令用于查找磁盘中损坏的区块。 电脑硬盘出现坏道后,如果不及时更换或进行技术处理&#xff0…

mysql约束添加删除数据_mysql中约束的添加,修改,与删除

MySQL中的约束,添加约束,删除约束,以及其他的一些修饰:一.NOT NULL(非空约束)添加非空约束1)建表时直接添加CREATE TABLE t_user(user_id INT(10) NOT NULL);2)通过ALTER 语句ALTER TABLE t_user MODIFY user_id INT(10) NOT NULL;ALTER TABLE t_user CHANGE user_i…

c++怎么输入带有空格的字符串_杭电OJ 字符串处理类部分题解

一、前言不知不觉已经大三上学期了,可作为一个计算机狗还没有考过CCF-CSP。因平时学习内容主要与安全方面相关,对于此类算法类的考核并没有太多的准备,故打算开始刷题复习算法和数据结构,准备CCF认证。在这里选择杭电的OJ作为准备…

python弹出框_selenium+python学习——弹出框

1、alert警告框 以百度搜索设置为例,在进行搜索设置后点击“保存设置”按钮,弹出alert对话框,如下图所示:实现代码: from selenium import webdriver import time as t from selenium.webdriver.support.select import…

mysql终端_MySQL之终端(Terminal)管理MySQL

前言:MySQL有很多的可视化管理工具,比如“mysql-workbench”和“sequel-pro-”。 现在我写MySQL的终端命令操作的文章,是想强化一下自己对于MySQL的理解,总会比使用图形化的理解透彻,因为我本来就比较喜欢写代码。同时…

python和node_Python和NodeJS绘图对比

在绘图方面,Python 比 NodeJS 好用,首先 Python 绘图库多,而且 API 强大而完善。 NodeJS 还是少点,一些库还没测就放弃了,需要 window 支持,而我需要在后端执行。 最近一直在搞地面雷达的可视化工作。在研究…

网页打开共享目录_你会做Excel文件目录吗?真的太太太太太简单了!

点击蓝字发送【2020】免费领 100图表模板!本文作者:长小安本文编辑:尔冬哈喽大家好!我是长小安,一名和秋叶一起学了多年 Excel、现在成功出道投稿的同学~让我来猜猜,你的电脑是不是也像我的一样&#xff0c…

centos7搜狐 mysql_基于centOS6.7搭建LAMP(httpd-2.4.18+mysql-5.5.47+php-5.6.16)环境

首先确保系统可以联网。设置IP地址以及虚拟机安装linux在此略过。本文采用centos6.7 64位minimal版、php5.6.16、httpd-2.4.18、mysql-5.5.47版搭建lamp环境。默认设置软件下载目录/usr/local/src,软件安装目录/app/local/下,安装顺序是apache→mysql→p…

c语言 如何创建adt_编程那些事儿:面向对象编程基石之数据抽象(ADT)

数据抽象本文接上一篇《编程那些事儿:为什么说抽象是面向对象编程的根基【1】?》,在了解了面向对象编程抽象的过程抽象后,下面我们继续聊一下数据抽象。数据抽象可以说面向对象编程最重要的基石。而数据抽象的结果就是数据类型(或简单的类型)…

mysql客户端版本太低_windows一机多装mysql,5.5低版本+5.8高版本

安装第一个mysql,压缩版或者安装版,过程省略,目录如下:运行中输入“regedit”进入后,找到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MySQL其实mysql启动的路径一般为:可执行文件的路径&…

java8 list 行转列_Java14 都来了,你还不会用 Java8吗?

Java 8 于2014年3月18日发布,并且成为主流的 Java,如今,虽然 Java 14 都已经发布了,但是 开发者和公司选择的版本依旧是经久不衰的 Java 8 版本,如果你还不了解这些新特性,是时候学习一下了。Java 8 更新的…

mysql主键用完了怎么办_MySQL 自增 ID 用完了怎么办?

MySQL 自增 ID 用完了怎么办?在MySQL中有很多类型的自增ID,每个自增ID都设置了初始值,然后按照一定的步长增加,只要定义了字节长度,那么就会有上限,如果达到上限再次添加,则会报主键冲突错误&am…

python怎么引用多行输入_python调用shell返回两行第二行需要输入密码怎么办?import os os.syst...

没有办法交互,用ftplib吧 # 例:FTP编程 from ftplib import FTP ftp FTP() timeout 30 port 21 ftp.connect(192.168.1.188,port,timeout) # 连接FTP服务器 ftp.login(UserName,888888) # 登录 print ftp.getwelcome() # 获得欢迎信息 ftp.cwd(file/t…

java rsa_java中RSA加解密的实现

public static void main(String[] args) throws Exception {// TODO Auto-generated method stubHashMap map RSAUtils.getKeys();//生成公钥和私钥RSAPublicKey publicKey (RSAPublicKey) map.get("public");RSAPrivateKey privateKey (RSAPrivateKey) map.get(…

python字典统计_python字典计数

广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元!字典?thcollections.counter 计数器? image.png找不到键的时候会调用miss方法如果键不是字符串&#xff0c…

java相册_精致小巧的java相册制作方法

本文实例为大家分享了java相册制作方法,供大家参考,具体内容如下注:1)html上的图片是静态指定的。当更新了新的图片时必须手工更新。所以使用Servlet读取本地images中的所有图片,动态显示给用户。2)如果存在中文名的图片&#xff…

python时间差转换成天数_Python实现计算两个时间之间相差天数的方法

本文实例讲述了Python实现计算两个时间之间相差天数的方法。分享给大家供大家参考,具体如下: #-*- encoding:UTF-8 -*- from datetime import date import time nowtime date.today() def convertstringtodate(stringtime): "把字符串类型转换为da…

java break的用法_Java基础break、continue语句的用法

break适用范围:只能用于switch或者是循环语句中。当然可以用于增强for循环。break作用:1. break用于switch语句的作用是结束一个switch语句。2. break用于循环语句中的作用是结束当前所在的循环语句。break和continue区别:break是结束循环,进…

利用python画分形图_使用 Python 绘制 Mandelbrot 分形图

以前收集的关于Mandelbrot分形图的Python脚本,Mandelbrot集合的图像因它洛可可式繁复卷曲华丽的风格而受到大众的欣赏和赞叹,与其他分形图案一起,是许多艺术家和设计师的灵感来源。 是由于今天个人电脑计算能力的强大,才有可能让我…

java ucs2转utf8_Windows下Unicode(UCS2),UTF8,GBK(GB2312)互转

Windows下提供了两个编码转换函数:WideCharToMultiByte和MultiByteToWideChar。用它们可实现Unicode(UCS2),UTF8,GBK(GB2312)互转。这两个函数的原型是:intWINAPIMultiByteToWideChar(__in UINT CodePage,__in DWORD dwFlags,__in…