1. 内置函数

  例如: print, round

2.自定义函数:

  通过def来定义
def funcname(parameter_list):
pass
  ⑴.参数parameter_list可以没有
  ⑵.在函数体重可以通过return返回value,如果没有返回value,则认为返回None
 
  对于无线递归函数,可以设置最大递归数量:
import sys
sys.setrecursionlimit(100000)
  sys.setrecursionlimit,系统默认为992
 
  函数是可以返回多个结果的:
def damage(skill1, skill2):
damage1 = skill1 * 3
damage2 = skill2 * 2 + 10
return damage1, damage2 damages = damage(3, 6)
print(type(damages))
//<class 'tuple'>
  
  我们可以通过【】和序号获取元组中的某个值。
  我们可以通过两个变量去接收这两个返回结果:
def damage(skill1, skill2):
damage1 = skill1 * 3
damage2 = skill2 * 2 + 10
return damage1, damage2 skill1_damage, skill2_damage = damage(3, 6)
print(skill1_damage, skill2_damage) //9 22

3.序列解包与链式赋值:

变量的逗号赋值,可以直接将赋值号后的元素们转换为元组:
d = 1,2,3
print(d)
# (1, 2, 3)
# <class 'tuple'>
那么,反过来,就是序列解包:
d = 1,2,3
a, b, c = d
此时可以得到以下代码:
a, b, c = 1,2,3
print(a, b, c)
# 1 2 3
解包数量应该与序列长度相等,如下就会报错:
a, b = [1, 2, 3]
#Traceback (most recent call last):
# File ".\c4.py", line 12, in <module>
# a, b = [1, 2, 3]
#ValueError: too many values to unpack (expected 2)
修改长度:
#a, b = [1, 2]
#print(a, b)
## 1 2 a, b = [1]
Traceback (most recent call last):
File ".\c4.py", line 12, in <module>
a, b = [1]
ValueError: not enough values to unpack (expected 2, got 1)
链式赋值:
 
a = b = c = 1
print(a, b, c)
#1 1 1

4.必须参数与关键字参数:

  必须参数:

  函数参数列表里定义的参数必须要传递的,如果不传递,是会报错的。
  如下列代码:
def add(x, y):
result = x + y
return result
  调用add函数时必须传两个参数,否则,会报错。
add(1)
# Traceback (most recent call last):
# File ".\c1.py", line 12, in <module>
add(1)
# TypeError: add() missing 1 required positional argument: 'y'
  其中,x,y被称为形参,调用时传入的数据被称为实参。

  关键字参数:

  可以指明我传入参数是谁,此时就不需要按照顺序去传入参数。

def add(x, y):
print(x, y) c = add(y = 3, x = 2)
# 2 3

 默认参数:

  在形参中赋予默认值。
def print_student_files(name, gender='男', age=22, college="华北水利水电大学"):
print('我叫' + name)
print('我今年' + str(age) + '岁了')
print('我是' + gender + '生')
print('我在' + college + '上学') print_student_files('鸡小萌', '男', 18, '人民路小学')
print('_______________________________________________')
print_student_files('五六七')
print('_______________________________________________')
print_student_files('果果', age = 17)
结果是:
我叫鸡小萌
我今年18岁了
我是男生
我在人民路小学上学
_______________________________________________
我叫五六七
我今年22岁了
我是男生
_______________________________________________
我叫果果
我今年17岁了
我是男生
我在华北水利水电大学上学
  注意:
    如果要设置默认参数,则所有的必须参数都要放在前边,所有的默认参数都放在后边。同时必须参数和默认参数也不能混着给。
print_student_files('果果', gender = '女', 17, college='牛津中学')

File "c6.py", line 13
print_student_files('果果', gender = '女', 17, college='牛津中学')
^
SyntaxError: positional argument follows keyword argument

  可变参数:

    *号可以将参数组成元组,且如果有必须参数的话,必须参数必须放在前边。
def demo(*param):
print(param)
print(type(param)) demo(1,2,3,4,5,6)
#结果:
#(1, 2, 3, 4, 5, 6)
#<class 'tuple'>
  而且,*号可以将实参进行平铺,即元组转换为一个个元素:
def demo(*param):
print(param)
print(type(param)) a = (1, 2, 3, 4, 5, 6)
demo(*a)
对于实参:
def demo(param1, *param, param2 = 2):
print(param1)
print(param2)
print(param) demo('a', 1,2,3, param2 = '3') #a
#3
#(1, 2, 3)

关键字可变参数:

   用两个*号去将关键字参数转为字典。
def city_temp(**param):
print(param)
print(type(param))
pass city_temp(bj = '32', xm = '23', sh = '31') #{'bj': '32', 'xm': '23', 'sh': '31'}
#<class 'dict'>
  遍历字典:
    以下是错误遍历:
def city_temp(**param):
for key, value in param:
print(key, ':', value) city_temp(bj = '32', xm = '23', sh = '31') #b : j
#x : m
#s : h
  正确遍历字典:
def city_temp(**param):
for key, value in param.items():
print(key, ':', value) city_temp(bj = '32', xm = '23', sh = '31') #bj : 32
#xm : 23
#sh : 31
  对于字典的反向输入:
def city_temp(**param):
for key, value in param.items():
print(key, ':', value) a = {'bj': '32c', 'sh':'31c'}
city_temp(**a) #PS F:\pythonlearn\Demo\eight> python .\c8.py
# bj : 32c
#sh : 31c

 5.变量作用域:

    此处可以看到与javascript中的作用域有很大的不同。先来看代码:

c = 50  

def add(x, y):
c = x + y
print(c) add(1, 2)
print(c)
#3
#50
  七月给的解释:函数内的c和函数外的c不是一个变量,相当于重新命名了一个变量a,然后打印a,与外边的c没有一点关系。

  然鹅,函数内部可以调用函数外部的变量,那么问题来了:
c = 10

def demo():
print(c) demo() #10
  for循环内定义的数据可以在for循环以外使用么?
def demo():
c = 50 for i in range(0, 9):
a = 'a'
c += 1
print(c)
print(a) demo() #59
#a
  也就是说,在python中for循环等循环体内并不构成作用域。即,python中并没有块儿级作用域。
 

6.作用域链:

  个人理解是:一个变量的值等于他所在的作用域中离得最近最小的作用域。即,所在作用域没有改变量,则向上级作用域查找,直到找到为止。
 
c = 1

def func1():
c = 2
def func2():
c = 3
print(c)
func2() func1() //依次将 c = 3, c = 2这两行代码注释,得到打印的结果分别是3, 2, 1

 

7.global关键字:

    可以通过global关键字将局部变量变为全局变量(变量会不会污染呢,我觉得不应该过多使用,或者说尽量不用)
def demo():
global c
c = 2 demo() print(c)
#2
个人测试,c10.py中写入上边代码,c11.py文件中导入
import c10
print(c10.c) //2
此时是可以打印出C的结果,然鹅,修改c11文件,
import c10
print(c) //c是未定义,因此,这个c并不是在项目中全局

python学习第五天 ----- 函数的更多相关文章

  1. Python学习(五)函数 —— 内置函数 lambda filter map reduce

    Python 内置函数 lambda.filter.map.reduce Python 内置了一些比较特殊且实用的函数,使用这些能使你的代码简洁而易读. 下面对 Python 的 lambda.fil ...

  2. Python学习笔记五,函数及其参数

    在Python中如何自定义函数:其格式为 def 函数名(函数参数): 内容

  3. Python学习(五)函数 —— 自定义函数

    Python 自定义函数 函数能提高应用的模块性,和代码的重复利用率.Python提供了许多内建函数,比如print()等.也可以创建用户自定义函数. 函数定义 函数定义的简单规则: 函数代码块以de ...

  4. python学习第五天--函数进阶

    局部变量与全局变量下面代码中,old_price,rite为全局变量,final_price为局部变量 globals() 声明全局变量,在函数内可修改函数外的变量 内嵌函数:函数当中嵌套函数 闭包: ...

  5. python学习第五次笔记

    python学习第五次笔记 列表的缺点 1.列表可以存储大量的数据类型,但是如果数据量大的话,他的查询速度比较慢. 2.列表只能按照顺序存储,数据与数据之间关联性不强 数据类型划分 数据类型:可变数据 ...

  6. Python学习第五堂课

    Python学习第五堂课推荐电影:华尔街之狼 被拯救的姜哥 阿甘正传 辛德勒的名单 肖申克的救赎 上帝之城 焦土之城 绝美之城 #上节内容: 变量 if else 注释 # ""& ...

  7. Python学习笔记之常用函数及说明

    Python学习笔记之常用函数及说明 俗话说"好记性不如烂笔头",老祖宗们几千年总结出来的东西还是有些道理的,所以,常用的东西也要记下来,不记不知道,一记吓一跳,乖乖,函数咋这么多 ...

  8. python学习交流 - 内置函数使用方法和应用举例

    内置函数 python提供了68个内置函数,在使用过程中用户不再需要定义函数来实现内置函数支持的功能.更重要的是内置函数的算法是经过python作者优化的,并且部分是使用c语言实现,通常来说使用内置函 ...

  9. Python学习(六) —— 函数

    一.函数的定义和调用 为什么要用函数:例如,计算一个数据的长度,可以用一段代码实现,每次需要计算数据的长度都可以用这段代码,如果是一段代码,可读性差,重复代码多: 但是如果把这段代码封装成一个函数,用 ...

随机推荐

  1. Flink的DataSource三部曲之三:自定义

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  2. 在pandas中使用pipe()提升代码可读性

    1 简介 我们在利用pandas开展数据分析时,应尽量避免过于碎片化的组织代码,尤其是创建出过多不必要的中间变量,既浪费了内存,又带来了关于变量命名的麻烦,更不利于整体分析过程代码的可读性,因此以流水 ...

  3. 9.mysql性能优化-慢查询分析、优化索引和配置

    目录 一.优化概述 二.查询与索引优化分析 1性能瓶颈定位 Show命令 慢查询日志 explain分析查询 profiling分析查询 2索引及查询优化 三.配置优化 max_connections ...

  4. streamreader

    using (StreamReader sr = new StreamReader(@"C:\Documents and Settings\Administrator\桌面\1.txt&qu ...

  5. 用数组实现队列(顺序队列&循环队列)

    用数组实现队列(顺序队列&循环队列) 顺序队列 ️ 队列(先进先出) 几个问题: 队列方法:入队.出队 队列的存储:即队首队尾两个指针, 扩容:如果队列容量不够了,应该扩容,如果队尾没有位置了 ...

  6. 阿里云函数计算 VSCode 使用,及部署 Docusaurus

    代码: https://github.com/ikuokuo/start-serverless 使用简介 产品页开通服务.使用流程,如下: 新手示例,如下: 创建函数 阿里云提供了如下几种方式创建函数 ...

  7. 329. Longest Increasing Path in a Matrix(核心在于缓存遍历过程中的中间结果)

    Given an integer matrix, find the length of the longest increasing path. From each cell, you can eit ...

  8. python之路《九》 迭代器与生成器

    1.生成器 通过列表生成式,我们可以直接创建一个列表.但是,受到内存限制,列表容量肯定是有限的.而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面 ...

  9. React native路由跳转navigate、push、replace的区别

    由于没有系统的去学习RN,对路由跳转了解不多,只是跟着项目在做,抽点时间简单学习一下RN路由跳转方法区别,总结如下: 如上图,外部是一个栈容器,此时A页面在最底部,navigate到B页面,为什么此时 ...

  10. 使用进程池模拟多进程爬取url获取数据,使用进程绑定的回调函数去处理数据

    1 # 使用requests请求网页,爬取网页的内容 2 3 # 模拟使用进程池模拟多进程爬取网页获取数据,使用进程绑定的回调函数去处理数据 4 5 import requests 6 from mu ...