5. 函数

Python函数代码块以 def 关键词开头; 函数内容以冒号起始,并且缩进。
  *注: python中,strings, tuples, 和 numbers 是不可更改的对象,而 list,dict 等则是可以修改的对象。
    前者传递的只是值的拷贝,不影响对象本身; 后者传递的是对象的地址,会改变对象本身

*5.1 参数:

1. 位置参数(必选参数):

   调用函数时,传入的值按照位置顺序依次赋给每个位置参数

2. 默认参数:

def power(x, n=2):   或   def enroll(name, gender, age=6, city='Beijing'):

  *注1:只有在与默认参数不符时才需要设置,可简化函数参数调用复杂度。注意:默认参数必须指向不变对象!

  *注2:调用函数时,缺省参数的值如果没有传入,则被认为是默认值;(默认参数的设置,默认参数必须指向不变对象)

  *注3:当你要用一个做运算的变量时候,千万不要用默认参数指定,默认地址第二次调用不会重新实例化一次

3.可变参数: *args

def calc(*numbers):
  sum = 0
  for n in numbers:
    sum = sum + n * n
  return sum
可使用 nums = [1, 2, 3]  或  (1,2,3) ####  calc(*nums)  在 list 或 tuple 前面加一个 * 号,把 list 或 tuple 的元素变成可变参数传进去

  

4.关键字参数:**kw 扩展函数功能
  (场景:用户注册时,除了用户名和年龄是必填项外,其他都是可选项,利用关键字参数来定义这个函数就能满足注册的需求。)

def person(name, age, **kw):
print('name:', name, 'age:', age, 'other:', kw)
可以传入任意个数的关键字参数:person('Adam', 45, gender='M', job='Engineer')

  *注1:*args 是可变参数,args接收的是一个tuple;
      **kw 是关键字参数,kw接收的是一个dict。
      可变参数既可以直接传入:func(1, 2, 3),又可以先组装list或tuple,再通过*args传入:func(*(1, 2, 3));
      关键字参数既可以直接传入:func(a=1, b=2),又可以先组装dict,再通过**kw传入:func(**{'a': 1, 'b': 2})。
      使用*args和**kw是Python的习惯写法,当然也可以用其他参数名,但最好使用习惯用法。

  *注2:使用关键字参数允许函数调用时参数的顺序与声明时不一致;

5.命名关键字参数:特殊分隔 * , * 后面的参数被视为命名关键字参数,限制调用者可以传入的参数名。如;只接收city和job作为关键字参数

def person(name, age, *, city, job):
print(name, age, city, job)

  如果函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不再需要一个特殊分隔符*了:

def person(name, age, *args, city, job):
print(name, age, args, city, job)

6.参数组合:
  参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。
  对于任意函数,都可以通过类似func(*args, **kw)的形式调用它,无论它的参数是如何定义的。

7.全局变量和局部变量
  定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。

参考廖雪峰教程:

https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431752945034eb82ac80a3e64b9bb4929b16eeed1eb9000

python笔记2:函数的更多相关文章

  1. Python:笔记(2)——函数与模块

    Python:笔记(2)——函数与模块 Python函数 关于函数 1.我们可以使用Help来查看函数的帮助信息 2.调用函数的时候,如果传入的参数数量或者类型不符合均会报错. 3.函数名其实就是一个 ...

  2. python笔记之函数

    函数 >>> def funTest(param1): ... 'this is function document string.' #正文需要有缩进 ... return par ...

  3. python笔记22-literal_eval函数处理返回json中的单双引号

    前言 在做接口测试的时候,最常见的接口返回数据就是json类型,json类型数据实际上就是字串,通常标准的json格式是可以转化成python里面的对应的数据类型的 有时候开发返回的数据比较坑,不按常 ...

  4. python笔记4 - 函数

    函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但你也可以自己创建函数,这 ...

  5. Python笔记008函数(2)

    1.        昨日内容回顾: def 函数(): 函数体 return 值 如果不写return,默认返回None.可以单独返回一个值,也能够以元组的形式返回多个值.(不要把print和retu ...

  6. python笔记-字符串函数总结

    字符串函数: chr() 数字转ASCII chr(96)="a" ord() ASCII转数字 ord("a")=96 isspace() 判断是否为空格 s ...

  7. Python笔记:调用函数,带扩号和和不带括号的区别

    调用函数,如果带括号,那么是调用函数运行后的结果, 调用函数不带括号,调用的是函数本身 例如: def cun (a,b): return a+b print(cun) : 调用函数,打印的是函数 p ...

  8. Python笔记-built-in函数,文件操作,lambda函数

    Built-In: i = abs(123) print(i) j = abs(-123) print(j)#123#123 #all,需要传一个可迭代的东西,里面所有的值是真,返回真 r1 = al ...

  9. 【python笔记】Qt+云函数 实现简单的登录框制作

    [python笔记]Qt+云函数 实现简单的登录框制作 备注:前置条件:QtDesigner.pycharm.PyQt5.配置好的云函数(百度的叫函数计算CFC,用来充当一个简陋的服务器,主要是免费) ...

  10. Python学习笔记7-把函数当参数传递、指定可变参数

    把函数当参数传递 # 函数参数传递 # 面向对象编程就是把对象传来传去 # 面向函数编程就是把函数传来传去 def mytest(num): return num * 2 # # 不光可以传递变量,还 ...

随机推荐

  1. Oracle 数据库常用SQL语句(1)

    一.数据定义语句 CREATE:创建表或其它对象 create database test; //创建test数据库 ),sex )); //创建表 ALTER:修改表或其它对象的结构 )); //为 ...

  2. 第一本C语言笔记(下)

    11. 数组 (1)数组初始化时,如果初始化数字个数超过存储区个数,就忽略多余数字.如果初始化数字个数少于存储区个数,则后面的存储区自动被初始化为0. (2)数组名称可以代表数组里第一个存储区的地址. ...

  3. LeetCode935

    问题:935. 骑士拨号器 国际象棋中的骑士可以按下图所示进行移动:  .            这一次,我们将 “骑士” 放在电话拨号盘的任意数字键(如上图所示)上,接下来,骑士将会跳 N-1 步. ...

  4. Python头脑风暴2

    今天想到了一个致富新途径:假如我在X东上班,我写个X宝爬虫,专门爬在X宝买奢侈品的土豪,然后我自己注册个X宝号,用脚本一个个加他们然后给他们发信息说我X东这还有比你更便宜更好的...不知道行不行啊(狗 ...

  5. UML结构与解析——BUAA OO第四单元作业总结

    UML与解析架构 UML是什么 统一建模语言(英语:Unified Modeling Language,缩写 UML)是非专利的第三代建模和规约语言.UML是一种开放的方法,用于说明.可视化.构建和编 ...

  6. 1507: [NOI2003]Editor(块状链表)

    1507: [NOI2003]Editor Time Limit: 5 Sec  Memory Limit: 162 MBSubmit: 4157  Solved: 1677[Submit][Stat ...

  7. spring boot + activeMq 邮件服务

    引入依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>s ...

  8. luogu3381 【模板】最小费用最大流

    每次选代价最小的流增广 #include <iostream> #include <cstring> #include <cstdio> #include < ...

  9. luogu3376 【模板】网络最大流 dinic

    当前弧优化 #include <iostream> #include <cstring> #include <cstdio> #include <queue& ...

  10. pg 创建自增id

    CREATE SEQUENCE original_site_id_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; 先创 ...