函数概念:

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 阿狸的进阶之路的更多相关文章

  1. python 阿狸的进阶之路(9)

    tcp传输: 传输需要ack回应,然后才清空缓存,服务端先起来. tcp流式协议,tcp的Nagle的优化算法,会将时间间隔短,数据量小的打包成一个,然后发送给对方,减少发送的次数. UDP协议: 不 ...

  2. python 阿狸的进阶之路(6)

    常用模块 json # 序列化 #将内存的数据存到硬盘中,中间的格式,可以被多种语言识别,跨平台交互数据 #json 可以将字典之类的数据类型存到字典中 import json dic = {&quo ...

  3. python 阿狸的进阶之路(5)

    一.模块 1.什么是模块: 包含了一组功能的python文件,文件名是xxx.py,模块名是module. 可以使用 import module,四个通用的类别: (1)用python编写的py文件 ...

  4. python 阿狸的进阶之路(8)

    异常处理 http://www.cnblogs.com/linhaifeng/articles/6232220.html(转) 网络编程socket http://www.cnblogs.com/li ...

  5. python 阿狸的进阶之路(7)

    面向对象 转自林海峰的博客  http://www.cnblogs.com/linhaifeng/articles/6182264.html 面向对象的理解: 将数据分类,比如学生类.数据有关的函数, ...

  6. python 阿狸的进阶之路(4)

    装饰器 #1.开放封闭原则:对扩展开放,对修改是封闭#2.装饰器:装饰它人的,器指的是任意可调用对象,现在的场景装饰器->函数,被装饰的对象也是->函数#原则:1.不修改被装饰对象的源代码 ...

  7. Python 从入门到进阶之路(一)

    人生苦短,我用 Python. Python 无疑是目前最火的语言之一,在这里就不再夸他的 NB 之处了,本着对计算机编程的浓厚兴趣,便开始了对 Python 的自学之路,并记录下此学习记录的心酸历程 ...

  8. Python 从入门到进阶之路(七)

    之前的文章我们简单介绍了一下 Python 中异常处理,本篇文章我们来看一下 Python 中 is 和 == 的区别及深拷贝和浅拷贝. 我们先来看一下在 Python 中的双等号 == . == 是 ...

  9. Python 从入门到进阶之路(六)

    之前的文章我们简单介绍了一下 Python 的面向对象,本篇文章我们来看一下 Python 中异常处理. 我们在写程序时,有可能会出现程序报错,但是我们想绕过这个错误执行操作.即使我们的程序写的没问题 ...

随机推荐

  1. 峰Redis学习(1)Redis简介和安装

    是从博客:http://blog.java1234.com/blog/articles/310.html参考过来的: 第一节:Redis 简介 为什么需要NoSQL,主要应对以下问题,传统关系型数据库 ...

  2. 计时器setInterval()

    在执行时,从载入页面后每隔指定的时间执行代码. 语法: setInterval(代码,交互时间); 参数说明: 1. 代码:要调用的函数或要执行的代码串. 2. 交互时间:周期性执行或调用表达式之间的 ...

  3. 学习笔记之k-nearest neighbors algorithm (k-NN)

    k-nearest neighbors algorithm - Wikipedia https://en.wikipedia.org/wiki/K-nearest_neighbors_algorith ...

  4. 敏捷软件开发——第8章 SRP:单一职责原则

    第8章 SRP:单一职责原则 一个类应该只有一个发生变化的原因. 8.1 定义职责 在SRP中我们把职责定义为变化的原因.如果你想到多于一个的动机去改变一个类,那么这个类就具有多于一个的职责.同时,我 ...

  5. tar -zxvf中的z是个什么鬼

    习惯了tar -czvf和tar -zxvf.今天在本地用压缩软件7z打了一个tar包,在docker容器中用tar -zxvf怎么都解压不了,报错gzip: stdin: not in gzip f ...

  6. Css学习(4)

    文档流(标准流) 元素自上而下,自左而右,块元素独占一行,行内元素在一行上显示,碰到父集元素的边框换行. 浮动布局 float:  left   |   right 特点: ★元素浮动之后不占据原来的 ...

  7. ACCESS常用数字类型的说明和取值范围

    下面是ACCESS常用数字类型的说明和取值范围列表明供参考 数字类型                 范围 Byte(字节)            介于 0 到 255 之间的整型数. Integer ...

  8. 15 Linux系统的终端

    在上一节的内容中,我们提到了设备文件,包括块设备文件(b)以及字符设备文件(c),这一节里面我们主要为大家说明Linux系统如何通过终端进行控制管理的,在这个过程中就用到相应的设备文件: Linux系 ...

  9. ElasticSearch索引

    简介 索引是具有相同结构的文档集合.在Elasticsearch中索引是个非常重要的内容,对Elasticsearch的大部分操作都是基于索引来完成的.同时索引可以类比关系型数据库Mysql中的数据库 ...

  10. C语言格式化%整理

    以输出为例: #include <stdio.h> main() { printf("**进制****************************************** ...