python自定义函数func_python自定义函数与面向对象
前言
python的最大特点就是dynamically typed就是动态类型,不像java需要定义数据类型
引入
先从一段代码引入:
1
2
3
4
5
6
7
8
9
10class Dog():
def __init__(self,name,age):
self.name=name
self.age=age
def getName(self):
return self.name
dog=Dog('name',16)
print(dog.getName())
别急,我们先学习下py的函数,这个形式跟C以及java等语言有点不一样。跨度有点大,对于刚接触来说,我们需要对比一下。
自定义函数
先来看一个例子
1
2
3
4
5def my_func(message):
print('Got a messag: {}'.format(message))
my_func('hello world')
#这里其实我有个地方不是很懂,不过大约能够知道什么意思,就是{}用来占位,记得在java中log常常这么用
大致形式
1
2
3def 函数名(参数):
处理
return/yeild
与其他语言不一样的是,def是可执行语句,即函数被调用前,都是不存在的,直到被调用的时候才会创建一个新的函数对象,并赋予其名字
对于以上这段话不理解的我们需要对比以下代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14hello()
def hello():
print('hello')
return
#报错,在主程序里,函数要先于调用前的定义
def my_func():
hello()
return
def hello():
print('hello')
return
my_func()
#正常运行,因为def是可执行语句,在调用的时候都不存在,但是我们必须保证调用前都已经声明定义了
注:我们先有个全局的概念,然后我们在看一下细节
我们深入来看一个代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15def my_func(l):
if not isinstance(l,list):
print('what you input is not a list')
return
if len(l)==0:
print('waht you input is empty')
return
largest=l[0]
for item in l:
if item>largest:
largest=item
print('the largest item in l is {}'.format(largest))
return
my_func([8,-1,0,2])
多态
看到这个我真的哭了,这里的多态完全跟java不同
1
2
3
4
5
6
7def my_sum(a,b):
print(a+b)
return
my_sum(1,2)
my_sum([1,2],[3,4])
my_sum('hello','world')
#对于这种来什么就接受什么的函数,必要时需要在前面进行类型检查
函数变量的作用域1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27MAX_VALUE=100
def test1(value):
global MAX_VALUE
MAX_VALUE=value
print(MAX_VALUE)
return
def test2(value):
MAX_VALUE=value
print(MAX_VALUE)
return
def test3():
print(MAX_VALUE)
return
test3()
test2(1)
test3()
test1(1)
test3()
----
输出结果:
100
1
100
1
1
分析一下:
函数内部默认为局部变量,即当函数调用结束后(return),该变量会被收回,并且不能够被访问
Python的全局变量定义在主程序中
函数可以调用全局变量,如果用更改全局变量的时候需要 global关键字,这里并不是重新创建一个新的变量,而是告诉Python 解释器,这里的变量就是之前定义的全局变量
如果函数内部的变量名与主程序的变量名重名,那么局部变量将覆盖全局变量
现在我们基本上了解了python的函数基本规则,我们回到类
1
2
3
4
5
6
7
8
9
10class Dog():
def __init__(self,name,age):
self.name=name
self.age=age
def getName(self):
return self.name
dog=Dog('name',16)
print(dog.getName())
在这里我们对比java的dog类如何去定义
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17public class Dog{
private String name;
private int age;
Dog(String name,int age){
this.name=name;
this.age=age;
}
String getName(){
return this.name;
}
public static void main(String...ags){
Dog dog=new Dog("name",16);
System.out.println(dog.getName());
}
}
这两段代码执行的效果是一样的。
区别:
python不需要提前声明的类的属性,因为不要指明属性的数据类型
Python的构造函数不是以类名,虽然调用的时候是以类名,说明在声明定义该类的对象的时候,会自动调用Init函数
注意到python的每个函数里面都有一个变量self,但是在调用的时候又不需要传入该参数,你可以看到这个self的作用跟this的作用差不多,只不过在python中必须使用这个self,在每一个类的方法中,self总是指向当前的实例,在init函数中self指向的最新被创建的对象,在其他函数中,指向调用该方法的对象
1
2
3
4
5
6
7
8
9
10
11
12
13
14class Dog():
def __init__(self,name,age):
self.__name=name
self.age=age
self.__sex='boy'
def getName(self):
return self.__name
dog=Dog('name',16)
dog.__name='Name'
print(dog.__name)
print(dog.getName())
print(dog.__sex)
注:在一次被python的数据定义给坑了
首先我们注意到java里面数据是由private属性的,那么在python中默认以两个下划线表示该属性为私有属性,不可被对象之间调用
但是如果dog.__name记住这里的name属性不是该类的属性,而是你给dog这个变量重新定义的一个,与类里定义的不同
接着我们深入了解面向对象里面的细节,先来看一下下面这段代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28class Dog():
MAX_AGE=16
def __init__(self,name,age):
self.name=name
self.age=age
@classmethod
def newName(cls,name):
cls.name=name
return
def getName(self):
return self.name
@staticmethod
def get_MAX_AGE(age):
if age
print("the dog age is {}".format(age))
return
else:
print('the maxage is {}'.format(Dog.MAX_AGE))
return
dog=Dog('NAME',14)
print(dog.getName())
dog.newName('name')
print(dog.getName())
dog.get_MAX_AGE(16)
第一个MAX_AGE是类中定义的常量,可以通过self.MAX_AGE或者Entity.MAX_AGE调用
注意到 @classmethod和@staticmethod 我们已经将类中的函数区别开来了,首先是classmethod类函数,能够动态访问或者修改对象的属性,其第一个参数一般为cls,最常用的功能是实现不用的init构造函数(好吧,上述代码不具有参考意义) ,@staticmehod是静态函数,可以用来做一些简单独立的任务,像什么测试等等,最后就是成员函数,是最正常的函数,不需要任何声明,第一个self代表当前对象的引用
写到最后
这样,已经大致的会写python的类了,但是面向对象里面还有个重要的思想就是继承。不过这个留到后面来深入。当前我的目标就是对python基础有个全貌的了解。
python自定义函数func_python自定义函数与面向对象相关推荐
- 在python中使用关键字define定义函数_python自定义函数def的应用详解
这里是三岁,来和大家唠唠自定义函数,这一个神奇的东西,带大家白话玩转自定义函数 自定义函数,编程里面的精髓! def 自定义函数的必要函数:def 使用方法:def 函数名(参数1,参数2,参数-): ...
- Python matplotlib可视化:自定义轴标签格式化函数(在轴刻度上添加自定义的数值以及符号形式)、使用自定义函数在Matplotlib中为坐标轴刻度添加自定义符号(例如,货币符号¥$等)
Python matplotlib可视化:自定义轴标签格式化函数(在轴刻度上添加自定义的数值以及符号形式).使用自定义函数在Matplotlib中为坐标轴刻度添加自定义符号(例如,货币符号¥$等) 目 ...
- python调用自己写的函数_python调用自定义函数的实例操作
在python中,想要调用自定义函数必须先声明,然后才能调用.使用函数时,只要按照函数定义的形式,向函数传递必需的参数,就可以调用函数完成相应的功能或者获得函数返回的处理结果. (1)声明函数 pyt ...
- python学习笔记之自定义函数
live long and prosper 自定义函数 def greet_user():"""现实简单的问候语"""print(" ...
- 一文弄懂python中的函数(自定义函数,匿名函数,高阶函数与解析式)
什么是函数,如何在 Python 程序中定义函数呢? 说白了,函数就是为了实现某一功能的代码段,只要写好以后,就可以重复利用. python中的自定义函数 Python 的函数具有非常灵活多样的参数形 ...
- Python爬虫笔记——def()自定义函数的几种参数
Python自定义函数是以def开头,空一格之后是这个自定义函数的名称,名称后面是一对括号,括号里放置形参列表,结束括号后面一定要有冒号":",函数的执行体程序代码也要有适当的缩排 ...
- Python之系统函数、自定义函数、模块、递归合集
一.函数(function)引入 1.函数(计算机函数)是程序中一段相对独立的代码,这段代码能够实现某一项具有独立.完整的功能.指可以直接被另一段程序代码引用的程序代码. 2.函数分为系统函数和自定义 ...
- 洗礼灵魂,修炼python(21)--自定义函数(2)—函数文档,doctest模块,形参,实参,默认参数,关键字参数,收集参数,位置参数...
函数文档 1.什么是函数文档: 就是放在函数体之前的一段说明,其本身是一段字符串,一个完整的函数需要带有函数文档,这样利于他人阅读,方便理解此函数的作用,能做什么运算 2.怎么查看函数文档: func ...
- python中func自定义函数_Python函数之自定义函数作用域闭包
一 前言 1.1 为什么要用函数 代码的组织结构更清晰,可读性好: 遇到重复的功能不需要重新编写代码,调用函数即可,代码不会冗余: 功能需要扩展时,只需要修改函数内容即可,实现统一管理,降低代码维护难 ...
最新文章
- Day4 python基础
- C++ dlopen mini HOWTO 一篇非常好的介绍C++ dlopen linux/mac os x 编程的资料
- Hive更换TEZ引擎
- Vue封装下拉框组件时,为document绑定原生事件addEventlistener(click“),切换页面之后事件还未被摧毁...
- linux 管道 top,linux IPC总结——管道
- ./mysqld: error while loading shared libraries: libnuma.so.1: cannot open shared object file: No suc
- python输入框输入提交_python文本文件处理和用户输入
- python实践统计学中的三大相关性系数,并绘制相关性分析的热力图
- 非常有意思的35句话
- 知识蒸馏 | 知识蒸馏的算法原理与其他拓展介绍
- vue_elementui拖住滑块拼图验证代码
- 设置美团用户cookie实现用户登录
- vue实现动态二维码完成签到功能
- OHS 12C中导入第三方SSL证书
- 华为鸿蒙与小米新系统,华为鸿蒙系统硬刚谷歌!小米也发布新系统:却选择和谷歌系统互补...
- 暗斑怎么形成的_脸上长暗斑详解
- 青龙扩展--九章头条
- Grafana自定义报警
- 华为云硬盘备份(VBS)服务
- ESIM(Enhanced Sequential Inference Model)- 模型详解
热门文章
- 计算机应用技术面试的礼仪和技巧,远程复试下,这些面试礼仪一定要注意!
- linux用java连接mysql_Java使用JDBC方式连接数据库
- 水星怎么设置网速最快_水星无线路由器如何设置网速限制 水星路由器怎么让别人网速限制方法...
- python opencv2_Python + OpenCV2 系列:2 - 图片操作
- php异步方案,php 伪异步执行实现方法
- 求一个向量变换为另一个向量的矩阵_OpenGL里旋转等变换矩阵为什么是4x4的矩阵...
- ll微信2下载安装_【兰苑文学】:陈振 ll黄金槐
- 编译原理语法分析_斯坦福大学《编译原理》学习记录 - 第二章:语法分析器
- 如何设置win7系统分辨率
- 高并发之服务降级和服务熔断____服务降级、熔断、限流的区别