一.Python函数介绍

  函数时组织好的,可重复的,用来实现单一,或相关联功能的代码段。

  函数的使用原则时先定义,后调用:事先准备工具的过程即函数的定义,遇到应用场景拿来当工具用即函数的调用。

  函数的使用时为了解决程序的组织结构不清晰,可读性差,可扩展性差以及代码冗余等问题。

二.Python函数定义与调用

  定义一个函数:

  函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()。
  任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。
  函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
  函数内容以冒号起始,并且缩进。
  return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。

定义函数的三种形式:

  1.无参函数

    def foo():

      print('')

  2.有参函数

    def foo(x,y):

      print(x,y)

  3.空函数

    def foo():

      pass

调用函数的三种形式:

  1.语句形式

    def foo():

      print('')

    foo()

  2.表达式形式

    def foo(x,y):

      return x+y

    res = foo(1,6)

  3.可以当作参数传递给另一个函数

    def max(x,y):
        if x>y:
            return x
        else:
            return y
    print(max(max(1 , 2) , 3))

三.函数的返回值

  return语句用于退出函数,选择性地向调用方返回一个值,不带参数值的return语句返回None。

  return是函数结束的标志,函数内可以拥有多个return,但只要执行一次,整个函数就结束

  函数的返回值需要注意:
  1 返回值没有类型限制
  2 返回值没有个数限制:
      返回一个值,调用函数拿到的结果就是一个值
      返回多个值,调用函数拿到的结果是一个元组
      返回0个值,或者不写return,调用函数拿到的结果None

四.函数参数的使用

  函数的参数分为两大类:
    1 形参:在定义函数阶段括号内指定变量名,形参本质就是变量名
    2 实参:在调用函数阶段括号内传入的值,实参本质就是值

  形参与实参的关系:在调用函数时,会将实参赋值给形参,这种关系在函数调用时临时生效,在调用结束后失效

形参与实参的具体分类:

  1.位置参数

    位置形参:在定义函数阶段按照从左到右的顺序依次定义的形参

    注意:但凡按照位置定义的形参,必须被传值,多一个少一个都不行

    位置实参:在调用函数阶段按照从左到右的顺序依次定义值

    注意:但凡按照位置定义的实参,会与形参一一对应

  2.关键字参数

    关键字参数:在调用函数阶段,按照key=value的形式传递参数

    注意:

      1.可以完全打乱顺序

      2.可以混合使用位置实参和关键字实参,但是位置实参必须放在关键字实参前面,而且不能对同一个形参重复赋值

  3.默认参数

    在定义函数阶段,就以及为某个形参赋值,改形参为有默认值的形参

    注意:

      1.在定义阶段就已经被赋值,意味着在调用阶段可以不用为其赋值

      2.位置形参应该放到默认形参前面

      3.默认参数的值在函数定义阶段就已经固定死了

      4.默认参数的值通常应该时不可变类型

  4.可变长度的参数

    站在实参的角度,参数长度可变指的是在调用函数时,传入的实参值的个数不固定

    而实参的定义方式无非两种:位置实参,关键字实参.对应着形参也必须有两种解决方案*与**,来分别应对移除的位置实参与关键字实参

    1.在形参中带*:会将调用函数时溢出的位置实参保存成元组的形式,然后赋值*后的变量名
      def foo(x,y,*z):#z=(3,4,5)
          print(x,y,z)
      foo(1,2,3,4,5)

      在实参中带*:但凡在实参中带*,在传值前都先将其打散成位置实参,再进行赋值操作
      def foo(x,y,*z):
          print(x,y,z)
      foo(1,*[2,3,4,5])#foo(1,2,3,4,5)

    2.在形参中带**:会将调用函数时溢出的关键字实参保存成字典的形式,然后赋值**后的变量名
      def foo(x,y,**z):#z={'b':3,'c': 4, 'w': 5}
          print(x,y,z)
      foo(1,y=2,b=3,c=4,w=5)
    在实参中带**:但凡在实参中带**,在传值前都先将其打散成关键字实参,再进行赋值操作
      def foo(x,y,z):
          print(x,y,z)
      foo(1,**{'z':1,'y':2})#foo(1,z=1,y=2)

    当我们想要将传给一个函数的参数格式原封不动地转给其内部的一个函数,应该使用下面这种形式
      def bar(x,y,z,w,s,a,b):
          print(x,y,z,w,s,a,b)
  
      def foo(*args,**kwargs) :#args=(1,2,3,4,5) kwargs={'a':1,'b':2}
          bar(*args,**kwargs)#bar(*(1,2,3,4,5),**{'a':1,'b':2})  bar(1,2,3,4,5,a=1,b=2)
      foo(1,2,3,4,5,a=1,b=2)#虽然调用的时foo,但是要遵循的是却是bar的参数标准

  5.命名关键字参数

    只要放到*与**之间的参数,称为命名关键字参数
    注意:命名关键字参数必须按照key=value的形式传值

Python函数(1)的更多相关文章

  1. python 函数之day3

    一 函数的语法及特性 什么是函数? 定义:函数是一个功能通过一组语句的集合,由名字(函数名)将其封装起来的代码块,要想执行这个函数,只要调用其函数名即可. 特性: 减少重复代码 使程序变的可扩展 使程 ...

  2. Python函数作用域的查找顺序

    函数作用域的LEGB顺序 1.什么是LEGB? L:local 函数内部作用域 E:enclosing 函数内部与内嵌函数之间 G:global 全局作用域 B:build-in 内置作用域 2.它们 ...

  3. Python函数讲解

    Python函数

  4. Python函数信息

    Python函数func的信息可以通过func.func_*和func.func_code来获取 一.先看看它们的应用吧: 1.获取原函数名称: 1 >>> def yes():pa ...

  5. Python函数参数默认值的陷阱和原理深究"

    本文将介绍使用mutable对象作为Python函数参数默认值潜在的危害,以及其实现原理和设计目的 本博客已经迁移至: http://cenalulu.github.io/ 本篇博文已经迁移,阅读全文 ...

  6. Python开发【第四章】:Python函数剖析

    一.Python函数剖析 1.函数的调用顺序 #!/usr/bin/env python # -*- coding:utf-8 -*- #-Author-Lian #函数错误的调用方式 def fun ...

  7. Python函数解析

    对于Python的函数,我们需要记住的是: 1. 函数的默认返回值是None. 2. python是一个自上而下逐行解释并执行的语言.因此,函数的定义必须在函数被调用之前.同名的函数,后定义的会覆盖前 ...

  8. Python入门笔记(18):Python函数(1):基础部分

    一.什么是函数.方法.过程 推荐阅读:http://www.cnblogs.com/snandy/archive/2011/08/29/2153871.html 一般程序设计语言包含两种基本的抽象:过 ...

  9. Python函数1

    Python 函数命令的使用 想想我们之前数学中学到的函数,首先我们需要定义一个函数,例如f(x)=x, 当x输入任意数的时候,f(x)都能输出和x相等的数值. 那么在Python中是如何实现的呢? ...

  10. python函数传参是传值还是传引用?

    首先还是应该科普下函数参数传递机制,传值和传引用是什么意思? 函数参数传递机制问题在本质上是调用函数(过程)和被调用函数(过程)在调用发生时进行通信的方法问题.基本的参数传递机制有两种:值传递和引用传 ...

随机推荐

  1. poj2947(高斯消元解同模方程组)

    题目链接:http://poj.org/problem?id=2947 题意:有n 种装饰物,m 个已知条件,每个已知条件的描述如下: p start enda1, a2......ap (1< ...

  2. 智能合约安全事故回顾(3)-DOS漏洞导致的KotET事件

    现实世界中的网络都是有带宽限制的,想象一下,一个访问量稳定的网站,突然有人利用某种方式爆发式的将网站的访问量提升,这个时候系统会作何反应?如果系统没有合理的防DOS攻击的方式,这种时候往往会造成服务器 ...

  3. 树状数组 二维偏序【洛谷P3431】 [POI2005]AUT-The Bus

    P3431 [POI2005]AUT-The Bus Byte City 的街道形成了一个标准的棋盘网络 – 他们要么是北南走向要么就是西东走向. 北南走向的路口从 1 到 n编号, 西东走向的路从1 ...

  4. ubuntu14.04 搭建samba

        1.安装软件      sudo apt-get remove libwbclient0      sudo apt-get remove samba-common      sudo apt ...

  5. 【Leetcode】Permutation Sequence

    The set [1,2,3,…,n] contains a total of n! unique permutations. By listing and labeling all of the p ...

  6. 老男孩python作业8-学员管理系统

    学员管理系统开发: 需求: 用户角色,讲师\学员, 用户登陆后根据角色不同,能做的事情不同,分别如下 讲师视图 管理班级,可创建班级,根据学员qq号把学员加入班级 可创建指定班级的上课纪录,注意一节上 ...

  7. N - 畅通工程再续 (最小生成树)

    相信大家都听说一个"百岛湖"的地方吧,百岛湖的居民生活在不同的小岛中,当他们想去其他的小岛时都要通过划小船来实现.现在政府决定大力发展百岛湖,发展首先要解决的问题当然是交通问题,政 ...

  8. PHP任意文件上传漏洞(CVE-2015-2348)

    安全研究人员今天发布了一个中危漏洞——PHP任意文件上传漏洞(CVE-2015-2348). 在上传文件的时候只判断文件名是合法的文件名就断定这个文件不是恶意文件,这确实会导致其他安全问题.并且在这种 ...

  9. 结合element-ui表格自动生成sku规格列表

    最近在写一个根据输入的规格,属性值动态生成sku表格,实现的效果大致如图,这是在vue项目里,结合element-UI表格写的,写好了就整理了一下,把代码贴上来,方便以后使用,不过代码里还是有一些重复 ...

  10. $('#').formValidation校验网址

    $('#addCarouselInfoForm').formValidation({ message: '格式不正确', //不忽略隐藏域验证 excluded: [], icon: { valid: ...