day3 python 阿狸的进阶之路
函数概念:
1.为什要有函数
组织结构不清晰,可读性差,代码冗余,可扩展性差。
2.什么是函数
具备某一个功能的工具---》函数
事先准备工具-》函数的定义
拿来就用、重复使用-》函数的调用
ps:先定义后调用
函数的分类:
1.内置函数:len,max(10,11),help(函数名),python中给你写好的。
2.自定一函数def
语法:
def 函数名(参数1,参数2,...):
"""注释"""
函数体
return 返回值
函数的使用:
内置的函数:(直接使用 就好)
- l1=[1,2,3,4,5]
- print(max(l1))
- 5
自定义函数:
- # def func(): #定义i阶段相当于在内存空间中的定义了这个名字,就相当于写了一个变量
- # print("hello world") #定义和函数体代码之间需要空4个空格
- # return 333
- #
- #
- # func() #调用阶段,执行函数体代码
- #hello world
- #########返回值的使用:
- #return的特点:
- #1、 函数内可以有多个return,但是只能执行一次return
- #2、 执行return函数就立刻结束,并且return的后值当做本次调用的结果返回
- # def func():
# print("hello world")
# return 333 #函数的返回值,可以当做变量使用,不限制类型。
#
# a = func()
# print(a)- #hello world
#333
函数的参数:
1.无参函数
- def func():
- print("hello world")
- return 333
2.有参函数
- # def auth(name,password): #括号中即为参数,函数可以当做变量来使用
- # if name =='egon' and password == '123':
- # print('login successfull')
- # else:
- # print('user or password err')
- #
- # def interactive():
- # name=input('name>>: ').strip()
- # password=input('password>>: ').strip()
- # auth(name,password)
- #
- # interactive()
3.空函数:
- def func():
- pass #即为什么也不做的意思,在写代码的时候,用于逻辑的填补。
- '''
- 1 为什么要有函数?没有函数带来的困扰?
- 组织结构不清晰,可读性差
- 代码冗余
- 可扩展性差
- 2 什么是函数
- 具备某一个功能的工具---》函数
- 事先准备工具-》函数的定义
- 拿来就用、重复使用-》函数的调用
- ps:先定义后调用
- 3 函数的分类:
- 内置函数:len,max(10,11),help(函数名)
- 自定义函数:def
- 语法:
- def 函数名(参数1,参数2,...):
- """注释"""
- 函数体
- return 返回值
- '''
- #'函数即是变量'
- # def print_tag():
- # print('*'*20)
- #
- # def print_msg(): #print_msg=<function print_msg at 0x00000000027EA8C8>
- # print('hello world')
- #
- #
- # # print(print_msg)
- # # print(print_tag)
- #
- # print_tag()
- # print_msg()
- # print_tag()
- #2、定义函数阶段都发生了什么事:只检测语法,不执行代码
- #定义阶段
- # sex='male'
- # def auth():
- # sex
- #
- # name=input('name>>: ').strip()
- # password=input('password>>: ').strip()
- # if name =='egon' and password == '123':
- # print('login successfull')
- # else:
- # print('user or password err')
- #
- # #调用阶段
- # auth()
- #3、函数的使用:先定义后调用
- # def bar():
- # print('from bar')
- #
- # def foo():
- # print('from foo')
- # bar()
- #
- # foo()
- # #定义阶段
- # def foo():
- # print('from foo')
- # bar()
- #
- # def bar():
- # print('from bar')
- #
- # #调用
- # foo()
- # # 定义阶段
- # def foo():
- # print('from foo')
- # bar()
- #
- # # 调用
- # foo()
- #
- # def bar():
- # print('from bar')
- #
- #4 定义函数的三种形式
- #第一种:无参函数
- #第二种:有参函数
- #第三种:空函数
- # def auth():
- # name=input('name>>: ').strip()
- # password=input('password>>: ').strip()
- # if name =='egon' and password == '123':
- # print('login successfull')
- # else:
- # print('user or password err')
- #
- # def my_max(x,y):
- # if x >= y:
- # print(x)
- # else:
- # print(y)
- #
- # my_max(1,2)
- # def auth(name,password):
- # if name =='egon' and password == '123':
- # print('login successfull')
- # else:
- # print('user or password err')
- #
- # def interactive():
- # name=input('name>>: ').strip()
- # password=input('password>>: ').strip()
- # auth(name,password)
- #
- # interactive()
- def auth():
- pass
- def put():
- pass
- def get():
- pass
- def ls():
- pass
tag警报器
- exp_str = 'id<5'
key=['>','=','<']
res=[]
char=''
opt=''
tag=False
for i in exp_str:
if i in key:
tag=True
if len(char) !=0:
res.append(char)
char=''
opt+=i
if not tag:
char+=i
if tag and i not in key:
tag=False
res.append(opt)
opt=''
char+=i
else:
res.append(char)- print(res)
- 这个例子将 一个 id<5 之类的字符分开变成 ['id', '<', ''] ,先设置一个空列表,用来控制输出,
将列表改变,变成以某个字符为特殊的分割点的列表,其中非特殊字符两侧的字符串相互拼接。
函数的返回值
- #return的特点:
- #1、 函数内可以有多个return,但是只能执行一次return
- #2、 执行return函数就立刻结束,并且return的后值当做本次调用的结果返回
- # def foo(x,y):
- # return x+y
- #
- # res=foo(1,2)
- #
- # def my_max(x,y):
- # if x >= y:
- # return x
- # else:
- # return y
- #
- # res=my_max(1,2)
- # print(res)
- # def foo():
- # print('first')
- # return 1
- # print('second')
- # return 2
- # print('third')
- # return 3
- #
- # res=foo()
- # print(res)
- #1、返回的值没有类型限制
- # def bar():
- # print('from bar')
- #
- # def foo():
- # return bar
- # print(foo() is bar)
- #2:return返回值的个数
- #2.1: 没有return:默认返回None
- #2.2:return 值:值本身
- #3.3: return 多个值:返回一个元组
- # def foo():
- # pass
- # return 1,'a',[1,2]
- # print(foo())
- #函数调用的三种形式
- def my_max(x,y):
- if x >= y:
- return x
- else:
- return y
- # res1=my_max(1,2)
- # res2=my_max(1,2)*10
- # res3=my_max(my_max(1,2),3)
- # print(res3)
- range(len([1,2,3]))
函数的参数:
- #函数的参数分类两种:
- #形参:在定义阶段括号内指定的参数,相当于变量名
- #实参:在调用阶段括号内传入的值称之为实参,相当于值
- #在调用阶段,实参的值会绑定给形参,在调用结束后解除绑定
- # def foo(x,y): #x=1,y=2
- # print(x,y)
- #
- # foo(1,2)
- #在python中参数的分类:
- #1、位置参数:按照从左到右的顺序依次定义的参数
- #位置形参:必须被传值,多一个少一个都不行
- #位置实参:与形参一一对应传值
- # def foo(x,y):
- # print(x,y)
- #
- # foo(2,1)
- #2、关键字参数:在函数调用时,按照key=value的形式定义的实参
- #特点:指名道姓地给形参传值,不再依赖与位置
- def foo(name,age,sex):
- print(name,age,sex)
- # foo('egon',18,'male')
- # foo(sex='male',age=18,name='egon',)
- #注意:
- #1、 关键字实参必须在位置实参的后面
- #2、 不能为同一个参数赋值多次
- # foo('egon',sex='male',age=18,name='egon')
- #3、默认参数:在函数定义阶段,就已经为形参赋值了
- #特点:定义阶段已经有值意味着调用阶段可以不用传值
- #位置参数通常用于经常变化的参数,而默认参数指的是大多数情况下都一样的
- # def foo(x,y=1):
- # print(x,y)
- # foo(1,2)
- # foo(y=3,x=1)
- # foo(111)
- # foo(x=1111)
- # def register(name,age,sex='male'):
- # print(name,age,sex)
- #
- # register('egon1',18)
- # register('egon2',18)
- # register('egon3',18)
- # register('alex',38,'female')
- #注意:
- #1、默认参数必须放到位置形参的后面
- # def register(name,sex='male',age,):
- # print(name,age,sex)
- #2、默认参数的值只在定义时被赋值一次
- #3、默认的参数的值通常应该是不可变类型
- # res=1
- # def foo(x,y=res):
- # print(x,y)
- #
- # res=10
- # foo('aaaaaaaa')
- #4 可变长参数:在调用函数时,实参值的个数不固定
- #实参的形式有:位置实参和关键字实参,
- #形参的解决方案:*,**
- #*args的用法
- # def foo(x,y,*args): #z=(3,4,5,6)
- # print(x,y)
- # print(args)
- #
- # # foo(1,2,3,4,5,6)
- #
- # foo(1,2,*[3,4,5,6]) #foo(1,2,3,4,5,6)
- # foo(*[1,2,3,4,5,6]) #foo(1,2,3,4,5,6)
- # def foo(x,y):
- # print(x,y)
- #
- # foo(*(1,2)) #foo(1,2)
- #**kwargs
- # def foo(x,y,**kwargs): #kwargs={'c':5,'a':3,'b':4}
- # print(x,y)
- # print(kwargs)
- #
- # # foo(y=2,x=1,a=3,b=4,c=5)
- #
- # foo(y=2,**{'c':5,'x':1,'b':4,'a':3}) #foo(y=2,a=3,c=5,b=4)
- # def foo(name,age):
- # print(name,age)
- # foo(**{'name':'egon','age':18})
- # foo({'name':'egon','age':18})
- # def bar(x,y,z):
- # print(x,y,z)
- #
- # def wrapper(*args,**kwargs): #args=(1,),kwargs={'z':2,'y':3}
- # # print(args,kwargs)
- # bar(*args,**kwargs) #bar(*(1,),**{'z':2,'y':3}) #bar(1,z=2,y=3,)
- #
- # wrapper(1,z=2,y=3)
- #命名关键字参数:指的是定义在*后的参数,该参数必须被传值(除非有它有默认值),而且必须按照key=value的形式传值
- # def foo(x,y,*args,m=100000,n):
- # print(x,y)
- # print(args)
- # print(m,n)
- #
- # foo(1,2,3,n=4,)
- #
day3 python 阿狸的进阶之路的更多相关文章
- python 阿狸的进阶之路(9)
tcp传输: 传输需要ack回应,然后才清空缓存,服务端先起来. tcp流式协议,tcp的Nagle的优化算法,会将时间间隔短,数据量小的打包成一个,然后发送给对方,减少发送的次数. UDP协议: 不 ...
- python 阿狸的进阶之路(6)
常用模块 json # 序列化 #将内存的数据存到硬盘中,中间的格式,可以被多种语言识别,跨平台交互数据 #json 可以将字典之类的数据类型存到字典中 import json dic = {&quo ...
- python 阿狸的进阶之路(5)
一.模块 1.什么是模块: 包含了一组功能的python文件,文件名是xxx.py,模块名是module. 可以使用 import module,四个通用的类别: (1)用python编写的py文件 ...
- python 阿狸的进阶之路(8)
异常处理 http://www.cnblogs.com/linhaifeng/articles/6232220.html(转) 网络编程socket http://www.cnblogs.com/li ...
- python 阿狸的进阶之路(7)
面向对象 转自林海峰的博客 http://www.cnblogs.com/linhaifeng/articles/6182264.html 面向对象的理解: 将数据分类,比如学生类.数据有关的函数, ...
- python 阿狸的进阶之路(4)
装饰器 #1.开放封闭原则:对扩展开放,对修改是封闭#2.装饰器:装饰它人的,器指的是任意可调用对象,现在的场景装饰器->函数,被装饰的对象也是->函数#原则:1.不修改被装饰对象的源代码 ...
- Python 从入门到进阶之路(一)
人生苦短,我用 Python. Python 无疑是目前最火的语言之一,在这里就不再夸他的 NB 之处了,本着对计算机编程的浓厚兴趣,便开始了对 Python 的自学之路,并记录下此学习记录的心酸历程 ...
- Python 从入门到进阶之路(七)
之前的文章我们简单介绍了一下 Python 中异常处理,本篇文章我们来看一下 Python 中 is 和 == 的区别及深拷贝和浅拷贝. 我们先来看一下在 Python 中的双等号 == . == 是 ...
- Python 从入门到进阶之路(六)
之前的文章我们简单介绍了一下 Python 的面向对象,本篇文章我们来看一下 Python 中异常处理. 我们在写程序时,有可能会出现程序报错,但是我们想绕过这个错误执行操作.即使我们的程序写的没问题 ...
随机推荐
- 使用Apache Mesos和Consul实现服务的注册发现
为保证基于Docker应用程序和服务都具有高性能和可用性,设计出一种具有服务发现,高可用性和容错能力的解决方案非常重要. 我们使用Apache Mesos 和Mesosphere的 Marathon实 ...
- Ajax的总结
1.运行Ajax的环境,在服务器上才可以实现他的功能,客户端等别的地方,虽然也可以运行,但是功能一定是不全的,有可能很多东西都不会发生反应: 2.传参 (只写关键步骤) (必须在服务器上运行) ge ...
- PostgreSQL中的group by
问题描述:今天使用了PostgerSQL查询统计一下相关信息,发现 报错了 SELECT * FROM "public"."dc_event_data" WHE ...
- Python3 文件的重命名
在Python3中我们要实现将本地文件homework.txt中的内容的修改操作时,大体的思路是这样的:先将homework.txt文件的内容读取到内存中,在内存中对里面的数据进行修改,接着将修改完成 ...
- Vue.js系列之项目结构说明
转:https://www.jb51.net/article/111658.htm 前言 在上一篇项目搭建文章中,我们已经下载安装了node环境以及vue-cli,并且已经成功构建了一个vue-cli ...
- [UE4]函数分组
函数分组相当于C#里面的“#region #end region”折叠注释
- Linux 网络命令找不到
1.安装好系统,命令找不到 如ifconfig等 解决办法: sudo apt-get install net-tools sudo ifconfig 如果命令前不想加sudo 在 .bashrc 文 ...
- python装饰器1
目的:在不修改原来函数代码的前提下,使用这个功能,可以使得之后这个函数被调用时增加额外的功能. #2.定义装饰器 def deco (fun): print "i am deco,i can ...
- U3D学习06-数学基础
1.fixed timestep 固定帧率, 2.time scale 快慢镜头,影响的是真实时间 3.time.deltatime增量时间,物体运动不受帧频率影响,每秒移动速度需要乘deltatim ...
- 本地IP,掩码,网关,DNS设置
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...