函数

  计算机中的函数和数学中的函数不是一回事,而是一个subroutine 、子程序、procedures、过程。

  作用:

  1、减少重复代码;

  2、方便修改,更易扩展;

  3、保持代码的一致性。

最简单的一个函数程序:

  def f():                                       #函数名的命名规则与变量的命名规则相同

    print("ok")

  f()                                              #调用的时候一定要记得加括号,因为定义一个函数的时候,如果不加括号

                那它只是一个变量

  def add(a,b)                              #这里的a,b就是形参,下面的7和5是实参,都是一一对应的

    print(a+b)                              在函数没有被调用的时候,它只是被print到了内存里 >>>>>>12

  add(7,5)

  如何实现动态效果呢?

  def f(index):

    print("function %s"% index)

  f(5)                                       >>>>>>function 5    #这就实现了动态输入,index是几就输入几

  这里要强调一下格式化输出:

  f.write("%s end action %s \n"%(time_current,n))

简单的函数代码,避免重复代码的:

def action1 (n):
print("starting action1...")
with open ("日志记录","a") as f:
f.write("end action %s \n"% n) def action2 (n):
print("starting action2...")
with open ("日志记录","a") as f:
f.write("end action %s \n"% n)
def action3 (n):
print("starting action3...")
with open ("日志记录","a") as f:
f.write("end action %s \n"% n)
action1(1)
action2(2)
action3(3)

这个代码就显得用点啰嗦,因为每一个函数里面都包含

with open ("日志记录","a") as f:
f.write("end action %s \n"% n)这样的重复代码,这时就可以将重复的代码写成函数。

import time
def function(n):
time_format="%Y-%m-%d %X" #格式化输出
time_current=time.strftime(time_format) #输出当前的时间
with open ("日志记录","a") as f:
f.write("%s end action %s \n"% (time_current,n)) def action1 (n):
print("starting action1...")
function(n) def action2 (n):
print("starting action2...")
function(n)
def action3 (n):
print("starting action3...")
function(n)
action1(1)
action2(2)
action3(3)

 

效果是一样的,都是新建一个日志记录的文档,在里面输入

函数的相关参数:

  def print_info(name,age):

    print ("Name:%s"% name)

    print("Age:%s"% age)                                        >>>>>>name:menheng

  print_info("mengheng",25)                                                       age:25               #必须参数

  print_info(name="mengheng",age="25")                                                          #关键字参数

不定长参数:

  高大上的加法器:

def add(*args):             #参数前面加个*表示不定长参数,用来存无命名的参数
print(args)
Sum=0
for i in args:
Sum+=i
print(Sum)
add(1,2,3,4,5)

请注意一般正常输入的不定长参数*arg都是以元组的形式输出,而如果在输入一个列表为[1,2,3]

输出的只能是([1,2,3],)为元组的一个元素,如果非要输出(1,2,3),则要在后面引用的f(*[1,2,3])

在括号里面加入*,同理**kwargs则是以字典的形式输出在下面的有命名参数中f(**{"name":"mengheng"})

这样就是传了字典过去。

def print_info(*args,**kwargs):
print(args)
print(kwargs)
print_info(*["alex","","male"],job="IT",hobby="girls",height="") #分为有命名的和没有命名的

>>>>>>('alex', '18', 'male')
            {'job': 'IT', 'hobby': 'girls', 'height': '188'}

  关于不定长的位置:*args放在左边,**kwargs参数放在右边。

  所以函数参数的优先级就是从左到右

  def func (name,age=22,*args,**kwargs)             #从左到右就是关键字参数,默认参数,不定长参数

函数的返回值:

  def f():

    print("ok")

    return 10

  a=f()

  print(a)

>>>>>>ok

10                               #返回值的作用:1、结束函数  2、返回某个对象

  注意点:1、如果函数没有返回值,那它的返回值就是none

      2、如果return多个对象,那么python会帮我们把多个对象封装成一个元组返回。

函数的作用域:

  python使用的LEGB的顺序来查一个符号对应的对象

  locals-->enclosing-->globals-->builtins

  对应的是:局部变量--》闭包空间--》全局变量--》内建模块

      低级----》高级                低级只能看和输出,但是并不能改变高级变量

count=10                            #定义了一个全局变量
def outer():
global count #在改全局变量的时候必须要声明一下
print(count)
count=5
print(count)
outer()

找变量的时候必须是从里到外找(只能看和输出,不能改),不能从外向里找,如果要改就要声明一下。

def outer():
count = 10
def inner():
nonlocal count
print(count)
count=5
print(count)
inner()
print(count)
outer()
>>>>>>10
    5
    5
 

python语法之函数1的更多相关文章

  1. python语法之函数

    函数: 将特定功能代码编写在一个函数里 便于阅读和复用 对一组表达特定功能表达式的封装 使程序模块化 python内置函数: input(),print(),eval()... 函数定义 函数语法格式 ...

  2. python语法join函数

    Python语法中join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串. vid = )

  3. python语法基础-函数-内置函数和匿名函数-长期维护

    ##################     内置函数        #######################  """ 一共是 68个内置函数: 反射相关的内置函 ...

  4. python语法------时间函数

    1.导入函数库: import time 获取格式化的时间 你可以根据需求选取各种格式,但是最简单的获取可读的时间模式的函数是asctime(): #!/usr/bin/python # -*- co ...

  5. python语法_函数

    ---恢复内容开始--- 函数: 1 减少重复代码 2 定义一个功能,需要直接调用 3 保持代码一致性 def  funcation_name(参数s): 功能代码块0 参数可以为多个,传入时按照前后 ...

  6. Python语法基础-函数,类以及调试处理

    [TOC] 1. 函数的定义 python中函数有两种: python自带的函数 用户定义函数 返回多个值 原来返回值是一个tuple!但是,在语法上,返回一个tuple可以省略括号,而多个变量可以同 ...

  7. python语法基础-函数-装饰器-长期维护

    ######################################################### # 装饰器 # 装饰器非常重要,面试Python的公司必问, # 原则:开放封闭原则 ...

  8. python语法基础-函数-进阶-长期维护

    ###############    函数的命名空间和作用域    ############## """ # 函数进阶 命名空间和作用域 命名空间 全局命名空间——我们自 ...

  9. Python语法之函数、引用和装饰器

    所谓函数,就是把具有独立功能的代码块组织成为一个小模块,在需要的时候调用 函数是带名字的代码块,用于完成具体的工作 需要在程序中多次执行同一项任务时,你无需反复编写完成该任务的代码,而只需调用该 任务 ...

随机推荐

  1. leetcode数据库题目及答案汇总

    1. 第二高的薪水 select ifnull((select distinct Salary from Employee order by Salary desc limit 1,1),null) ...

  2. Redis集群以及自动故障转移测试

    在Redis中,与Sentinel(哨兵)实现的高可用相比,集群(cluster)更多的是强调数据的分片或者是节点的伸缩性,如果在集群的主节点上加入对应的从节点,集群还可以自动故障转移,因此相比Sen ...

  3. Spring再接触 整合Hibernate

    首先更改配置文件 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http ...

  4. chrome浏览器和其它浏览器对scrollTop、scrollLeft的获取方法

    chrome浏览器不能通过document.documentElement.scrollTop来获得距上滚动距离,得到的值始终为0:需要用document.body.scrollTop来获取.其它浏览 ...

  5. RPC web service

    ---------------------------------------------------------------------------------------------------- ...

  6. Hbase--知识点总结3

    Hbase知识点总结:  hbase表中为什么列族的数量不能太多? 因为当一个列族数据溢写的时候,其他列族也会发生数据溢写,但是其他列族中数据的数量还没有达到溢写的阈值,就会导致产生的小文件数量增多. ...

  7. Java框架spring Boot学习笔记(四):Spring Boot操作MySQL数据库

    在pom.xml添加一下代码,添加操作MySQL的依赖jar包. <dependency> <groupId>org.springframework.boot</grou ...

  8. Apache和Nginx运行原理解析

    Web服务器 Web服务器也称为WWW(WORLD WIDE WEB)服务器,主要功能是提供网上信息浏览服务. 应用层使用HTTP协议. HTML文档格式. 浏览器统一资源定位器(URL). Web服 ...

  9. R语言读取XML数据

  10. css样式之input输入框默认样式

    帮朋友写个简单的课程设计,后面会贴出来,项目刚开始就遇到一个坑(给input输入框设定样式,但是,点击后会出现蓝色边框),之前写其他的项目时也遇到过,百度一下资料解决了,现在又碰到了,写一下,留着备用 ...