函数1

(1)定义:

def 函数名(参数列表)
    函数体

(2)参数传递:

  在python中,一切都是对象,类型也属于对象,变量是没有类型的。

  a = [1,2,3]

  a = "helloworld"

以上代码中,[1,2,3]是list类型,"helloworld"是string类型,而变量a是没有类型的,它仅仅是一个对象的引用(一个指针),可以是指向list类型对象,也可以指向string类型对象。 

  可更改(mutable)和不可更改(immutable)对象:

在python中,string,tuples,numbers是不可更改对象,而list,dictionary等是可修改对象。

①不可变类型:变量赋值a = 5后再赋值a = 10,这里实际是新生成一个int值对象10,再让a指向它,而5被丢弃,不是改变了a的值,相当于新生成了a.

②可变类型:变量赋值list= [1,2,3,4]后再赋值list[2] = 5,则是将列表list的第三个元素值更改,本身没有动,只是内部的一部分值被修改了。 

  python函数的参数传递:

①不可变类型:类似于(值传递),如 整数(number)、字符串(string)、元组(tuple)。如fun(a),传递的只是a的值,没有影响a对象本身。

        比如在 fun(a)内部修改 a 的值,只是修改另一个复制的对象,不会影响 a 本身。

 def change(a, b):
"""传递不可变对象,交换两个数的值"""
c = a
a = b
b = c x = 2
y = 3 change(x, y) print(x, y)

输出结果:

2 3

可以发现,将x,y的值传入change函数,进行交换后,输出x,y的值还是原来的值,这就是不可变类型传递。

②可变类型: 类似于(引用传递),如 列表(list),字典(dict)。如 fun(list),则是将 list 真正的传过去,修改后fun外部的list也会受影响。

 def alter_list(list):
"""传递可变对象,修改列表的值"""
list[0] = 3 list1 = [1, 2, 3, 4, 5]
alter_list(list1)
print(list1)

输出结果:

[3, 2, 3, 4, 5]

可以发现,list1中的值发生了改变,同样的写法,上面的例子中的值没有改变,而下面的值却改变,这就是因为不可变类型和可变类型的参数传递。

注意:python 中一切都是对象,严格意义我们不能说值传递还是引用传递,我们应该说传不可变对象和传可变对象。

(3)参数:

  必须参数,位置参数,关键字参数,默认参数,不定长参数。

①必须参数: 调用函数时必须传入一个参数。

     def func(a):
print(a) func() # 没有参数会报错

②位置参数:在传递参数时必须与形参的顺序对应。

     def func(a, b):
print('a=%s'%a)
print('b=%s'%b) func(2, 3)
func(3, 2)

③关键字参数:使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值。

 def func(a, b):
  print('a=%s'%a)
  print('b=%s'%b) func(a=2, b=3)
func(b=3, a=2)

④默认参数:调用函数时,如果没有传递参数,则会使用默认参数。

     def func(a, b=3):
print('a=%s'%a)
print('b=%s'%b) func(2)

⑤不定长参数: def 函数名(形参1,*形参2)       加了星号*的参数会以元组(tuple)的形式导入,存放所有未命名的变量参数。

       def 函数名(形参1,**形参2) 加了两个星号**的参数会以字典的形式导入。

 def func1(a, *b):
  print(a)
  print(b) func1(3, 4, 5, 'a', [1, 2, 3]) def func2(a, **b):
8   print(a)
  print(b) func2(3, c=4, d=5)  # 因为**要以字典的形式存储,而字典需要key值和value值,所以传参的时候要用这种方式

输出结果:

3
(4, 5, 'a', [1, 2, 3])
3
{'c': 4, 'd': 5}

  

python函数学习1的更多相关文章

  1. [python 函数学习篇]默认参数

    python函数: 默认参数: retries= 这种形式 def ask_ok(prompt, retries=, complaint='Yes or no, please!'): while Tr ...

  2. python函数学习的总结

    python函数 part1 函数的作用: 函数以功能(完成一件事)为导向 随调随用减少代码重复性 增强代码可读性 函数的结构: def 函数名(): 函数体 函数的返回值 return:在函数中遇到 ...

  3. python函数学习之装饰器

    装饰器 装饰器的本质是一个python函数,它的作用是在不对原函数做任何修改的同时,给函数添加一定的功能.装饰器的返回值也是一个函数对象. 分类: 1.不带参数的装饰器函数: def wrapper( ...

  4. Python函数学习遇到的问题

    Python函数的关键字参数 Python函数独立星号(*)分隔的命名关键字参数 Python函数中的位置参数 Python中对输入的可迭代对象元素排序的sorted函数 Python中函数的参数带星 ...

  5. python函数学习(一)

    1.parse_known_args()和parse_args()函数 该函数为命令行解析函数,调用时需要import argparse(命令行选项.参数和子命令的解析器). 以下内容摘自python ...

  6. Python函数学习——递归

    递归函数 在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数. 函数实现过程 def calc(n): v = int(n//2) print(v) if v > ...

  7. Python函数学习——初步认识

    函数使用背景 假设老板让你写一个监控程序,24小时全年无休的监控你们公司网站服务器的系统状况, 当cpu\memory\disk等指标的使用量超过阀值时即发邮件报警, 你掏空了所有的知识量,写出了以下 ...

  8. Python函数学习——作用域与嵌套函数

    全局与局部变量 在函数中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量. 全局变量作用域是整个程序,局部变量作用域是定义该变量的函数. 当全局变量与局部变量同名时,在定义局部变量的函数内 ...

  9. Python --函数学习3 (将函数存储在模块中)

    将函数存储在模块 函数可以将代码块和主程序分离,通过给函数指定描述性名称,可以让主程序更加容易理解,还可以更进一步,将函数存储在模块的独立文件中,再将模块导入到主程序.import 语句允许再当前运行 ...

随机推荐

  1. springCloud笔记

    分布式和集群的理解:比如在一个厨房有两个厨师,一个炒菜,一个洗菜,各自做不同的事情,但是却在合作,这种叫做分布式,两个都在炒菜或者都在做菜,就叫做集群. eureka的是springCloud的注册中 ...

  2. 基于grafana+telegraf的服务器监控方案

    准备工作:安装InfluxDb 1 Windows 1.1 下载agent      https://dl.influxdata.com/telegraf/releases/telegraf-1.10 ...

  3. GitHub 使用说明

    GitHub使用教程 附件是Github 使用说明: GitHub使用说明.pdf 目录 1      注册帐户... 2 2      登录帐户... 2 3      创建仓库... 2 4    ...

  4. 2019.03.29 NOIP训练 友好国度(点分治+容斥)

    传送门 思路: 直接上点分治+容斥计算每个因数对应的贡献即可. 代码: #include<bits/stdc++.h> #define ri register int using name ...

  5. MySQL-查询结果缓存

    1.缓存必备: SQL文相同,数库表字段构.记录不变,大小写不敏感,字符集敏感 2.提缓存: 缓存配高.分区 3.多个应用多配置 4.SELECT SQL_NO_CACHE/SQL_CACHE my. ...

  6. centos 下Python独立虚拟环境创建

    virtualenv Python有着庞大的开源社区的支持,很自然就产生这么一个问题:第三方包参差不齐,如果我们想在服务器测试,或者升级某个包,就会导致生产环境产生杂乱,多余的第三方依赖包. virt ...

  7. windows下Apache配置多个站点

    1. httpd.conf 找到以下两行去掉注释: # Include conf/extra/httpd-vhosts.conf # LoadModule vhost_alias_module mod ...

  8. VS中Debug与Release、_WIN32与_WIN64的区别

    一.Debug与Release 1.  区别 Debug——调试版,生成的.exe中包含很多调试信息,若直接发包,比较大: Release——发布版 2.  如何区分是Debug编译还是Release ...

  9. linux sshd 登录不需要密码

    ssh 安全外壳协议 协议22 linux 默认放行了 22 号接口 ssh 默认安装 自行安装 应该是 openssh-server ssh命令是 openssh ssh-keygen 生成密钥 生 ...

  10. Leetcode(二)两数相加

    两数相加 题目描述 给出两个非空的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链 ...