Python3 与 NetCore 基础语法对比(Function专栏)

简介: Jupyter最新排版:https://www.cnblogs.com/dotnetcrazy/p/9175950.html 昨晚开始写大纲做demo,今天牺牲中午休息时间码文一篇,希望大家点点赞 O(∩_∩)O NetCore:https://github.

Jupyter最新排版:https://www.cnblogs.com/dotnetcrazy/p/9175950.html

昨晚开始写大纲做demo,今天牺牲中午休息时间码文一篇,希望大家点点赞 O(∩_∩)O

NetCore:https://github.com/lotapp/BaseCode/tree/master/netcore/1_POP/6func

Python:https://github.com/lotapp/BaseCode/tree/master/python/1.POP/4.func_IO

在线演示http://nbviewer.jupyter.org/github/lotapp/BaseCode/tree/master/python/notebook/1.POP/4.func

在线编程https://mybinder.org/v2/gh/lotapp/BaseCode/master

主要是普及一下Python基础语法,对比着Net,新手更容易上手。对比学习很有意思的,尤其是一些底层和思路

本来感觉函数要说的地方没多少,细细一规划,发现~还是单独拉出一篇说说吧,之后就进入面向对象了,函数还是有必要了解一下的,不然到时候Class里面的方法定义又要说了。

演示的模式一直在变,刚开始让大家熟悉一下VSCode,后来引入了ipython交互式编程的概念,现在就用前几天讲的Notebook来演示了(VSCode现在也有这个预览版的插件了)

直接跳到扩展系列https://www.cnblogs.com/dotnetcrazy/p/9175950.html#ext

先从函数定义说起吧:

# 定义一个空函数:(不写pass就报错了)


定义一个无参函数注意缩进


定义一个含参函数

扩:文档说明用""" 或者'''来定义,就是如下效果


定义一个含默认参数(缺省参数)的函数

# 定义有返回值的函数


# 定义含有多个返回值的函数(利用了元组)

来个案例解释一下:(多返回值只是一种假象,Python函数返回的仍然是单一值~元组)


传多个参数系列:(上面那个多返回参数也可以返回一个list来实现类似效果)

引用传递(通过元组、列表实现)扩展有可变类型和不可变类型作为形参的对比


# 定义一个可变参数的函数(参数名字一般都是*args)

如果你需要传一个元组或者列表进去的话,可以 参数前面加*
# 定义含关键字参数的函数def default_kv_params(name,age=23, **kv):

# 可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple
# 关键字参数允许你传入0个或任意个含key-value的参数,自动组装为一个dict

来个综合案例:def default_god_params(name,age=23,*args,**kv):

需要注意py里面的书写格式==》 先定义再调用 Code参考

NetCore:(C#基础语法大家都很熟了,我贴一个注释的Code即可)
VSCode里面如果也想像VS一样,///就生成注释==》请安装函数文档注释:XML Documentation Comments
using System;
using System.Collections.Generic;

namespace _6func
{
    class Program
    {
        static void Main(string[] args)
        {
            #region Base
            // # 定义一个空函数:
            Method();
            // # 定义一个无参函数
            GetName();
            // # 定义一个含参函数
            ShowInfos("李四", 22);
            // # 定义一个含默认参数(缺省参数)的函数
            DefaultParam("张三");
            // # 定义有返回值的函数
            int result = DivHaveReturn(1, 2);
            Console.WriteLine($"计算结果为{result}");
            #endregion

            // # 定义含有多个返回值的函数(利用了元组)
            var (sum, dvalue) = DivHaveReturns(1, 2);
            Console.WriteLine($"sum:{sum},D-value:{dvalue}");

            // 传多个参数系列:
            // 引用传递(通过元组、列表实现):扩展有可变类型和不可变类型作为形参的对比
            var list = new List<int>() { 1, 2, 3, 4, 5 };
            Console.WriteLine(DefaultSomeParams(list));
            Console.WriteLine(list.Count);//这就是引用传递的证明

            // # 定义一个可变参数的函数(参数名字一般都是*args)
            Console.WriteLine(DefaultParams(1, 2, 3, 4, 5));

            // # 定义含关键字参数的函数 直接传Dict
        }

        #region base
        /// <summary>
        /// 定义一个空函数
        /// </summary>
        private static void Method()
        {

        }
        /// <summary>
        /// 定义一个无参函数
        /// </summary>
        // private static void GetName()
        // {
        //     Console.WriteLine("你好");
        // }
        //简写
        private static void GetName() => Console.WriteLine("你好");

        /// <summary>
        /// 定义一个含参数的函数
        /// </summary>
        /// <param name="name">名字</param>
        /// <param name="age">年龄</param>
        // private static void ShowInfos(string name, int age)
        // {
        //     Console.WriteLine($"我叫{name} 我的年龄是{age}");
        // }
        //简写
        private static void ShowInfos(string name, int age) => Console.WriteLine($"我叫{name} 我的年龄是{age}");

        /// <summary>
        /// 定义一个含缺省参数的函数
        /// </summary>
        /// <param name="name">名字</param>
        /// <param name="age">年龄默认23</param>
        // private static void DefaultParam(string name, int age = 23)
        // {
        //     Console.WriteLine($"我叫{name} 我的年龄是{age}");
        // }
        //简写
        private static void DefaultParam(string name, int age = 23) => Console.WriteLine($"我叫{name} 我的年龄是{age}");

        /// <summary>
        /// 定义一个有返回值的函数(计算a+b,返回计算结果)
        /// </summary>
        /// <param name="a">num1</param>
        /// <param name="b">num2</param>
        // private static int DivHaveReturn(int a, int b)
        // {
        //     return a + b;
        // }
        //简写
        private static int DivHaveReturn(int a, int b) => a + b;
        #endregion

        /// <summary>
        /// 定义含有多个返回值的函数(利用了元组)
        /// 计算a+b的和,计算a-b,并返回两个结果
        /// </summary>
        /// <param name="a"></param>
        /// <param name="b"></param>
        /// <returns></returns>
        // private static (int sum,int dValue) DivHaveReturns(int a, int b)
        // {
        //     return ((a+b),(a-b));
        // }
        //简写
        private static (int sum, int dValue) DivHaveReturns(int a, int b) => ((a + b), (a - b));

        #region 传入多个参数系列
        /// <summary>
        /// 利用列表实现,引用传递之类的C#还有ref和out,这边就不说了
        /// </summary>
        /// <param name="nums"></param>
        /// <returns></returns>
        private static int DefaultSomeParams(List<int> numList)
        {
            int sum = 0;
            foreach (var item in numList)
            {
                sum += item;
            }
            numList.Clear();
            return sum;
        }
        /// <summary>
        /// 定义一个可变参数的函数
        /// </summary>
        /// <param name="args"></param>
        /// <returns></returns>
        private static int DefaultParams(params int[] args)
        {
            int sum = 0;
            foreach (var item in args)
            {
                sum += item;
            }
            return sum;
        }
        #endregion
    }
}
函数 相关扩展
1.递归函数:函数递归调用其实就是自己调用自己,关键点只要考虑什么时候跳出即可(没有跳出就是死循环)
先来个简单的案例熟悉一下:
来个案例(实际工作中并不会自己定义,用系统自带 strip方法即可)

2.匿名函数系列:lambda 参数: 表达式
来个经常用的案例:data_list.sort( key=lambda x:x["key"])
还有一个比较常用的地方:( 当参数传递
NetCore:上面Code中的简写都是用匿名函数的方式,可以参考

3.全局变量和局部变量 
有人可能会说,这个就太简单了,没啥好说的,(⊙o⊙)… Python还真需要说说,来个案例给你猜结果:
直接看结果吧:发现 全局变量a木有被修改,而b修改了
还是来个简单案例说明下吧~

# 这是因为,python定义一个变量的写法不用加类型导致的(⊙﹏⊙) 所以函数里面a=200,python解释器就认为你定义了一个和a这个全局变量名字相同的局部变量,那怎么用呢?global来声明一下全局变量即可:

总结:
# 在函数中不使用global声明全局变量不能修改全局变量==>本质是不能修改全局变量的指向,即不能将全局变量指向新的数据
# 对于不可变类型的全局变量来说,因其指向的数据不能修改,所以不使用global时无法修改全局变量
# 对于可变类型的全局变量来说,因其指向的数据可以修改,所以不使用global时也可修改全局变量

下面就进入验证扩展系列,看看一些概念
# 之前很多资料说py3 匿名函数里不能调用print函数,自己测试下

# 可变类型与不可变类型的变量分别作为函数参数的区别
# 感到疑惑可以看之前的运算符扩展( https://www.cnblogs.com/dotnetcrazy/p/9155310.html#ext

# Python中函数参数都是引用传递
# 对于不可变类型,因变量不能修改,所以运算不会影响到变量自身
# 而对于可变类型来说,函数体中的运算有可能会更改传入的参数变量


# 函数名能不能重复的问题(能不能 重载:具有不同的参数的类型或参数的个数【跟返回值没关系】
结论:函数名不能重名

来两个有趣的扩展
1.交换两个数熟悉吧,编程第一课,除了用 第三变量 或者 两数相加减 实现外,Python还有一种 新方式a,b=b,a
NetCore:这个我也是刚知道,O(∩_∩)O哈哈~还得谢谢评论区的兄弟^_^

  2.eval(和js里面的eval差不多):不太建议使用
 
 
先到这吧,有什么扩充的下面再贴吧~
作者: 毒逆天
打赏: 18i4JpL6g54yAPAefdtgqwRrZ43YJwAV5z
本文版权归作者和博客园共有。欢迎转载,但必须保留此段声明,且在文章页面明显位置给出原文连接!
目录
相关文章
|
人工智能 Ubuntu IDE
【Python】基础:环境配置与基础语法
本文介绍了Python编程语言及其环境配置方法。Python由Guido van Rossum于1991年创建,以其简洁、易学和强大的功能著称。文章详细讲解了Python的主要特点、Windows和Ubuntu下的安装配置步骤、基础语法、控制流、函数、文件操作、模块使用及面向对象编程等内容,帮助读者快速入门Python编程。
353 4
|
IDE 数据挖掘 开发工具
Python作为一种广受欢迎的高级编程语言,以其简洁的语法和强大的功能吸引了众多初学者和专业开发者
Python作为一种广受欢迎的高级编程语言,以其简洁的语法和强大的功能吸引了众多初学者和专业开发者
287 7
|
7月前
|
Python
[oeasy]python086方法_method_函数_function_区别
本文详细解析了Python中方法(method)与函数(function)的区别。通过回顾列表操作如`append`,以及随机模块的使用,介绍了方法作为类的成员需要通过实例调用的特点。对比内建函数如`print`和`input`,它们无需对象即可直接调用。总结指出方法需基于对象调用且包含`self`参数,而函数独立存在无需`self`。最后提供了学习资源链接,方便进一步探索。
184 17
|
7月前
|
人工智能 Python
[oeasy]python083_类_对象_成员方法_method_函数_function_isinstance
本文介绍了Python中类、对象、成员方法及函数的概念。通过超市商品分类的例子,形象地解释了“类型”的概念,如整型(int)和字符串(str)是两种不同的数据类型。整型对象支持数字求和,字符串对象支持拼接。使用`isinstance`函数可以判断对象是否属于特定类型,例如判断变量是否为整型。此外,还探讨了面向对象编程(OOP)与面向过程编程的区别,并简要介绍了`type`和`help`函数的用法。最后总结指出,不同类型的对象有不同的运算和方法,如字符串有`find`和`index`方法,而整型没有。更多内容可参考文末提供的蓝桥、GitHub和Gitee链接。
196 11
|
8月前
|
Python
课时19:Python的基本语法
今天给大家带来分享的是 Python 的基本语法,分为以下六个部分。 1.在 Python 中严格区分大小写 2.Python 中的每一行就是一条语句,每条语句以换行结束 3.Python 中每一行语句不要过长 4.条语句可以分多行编写,语句后边以\结尾 5.Python 是缩进严格的语言,不要随便写缩进 6.在 Python 中使用#来表示注释
162 2
|
存储 索引 Python
Python 的基本语法
这些是 Python 的基本语法要素,掌握它们是学习和使用 Python 的基础。通过不断地实践和应用,你将能够更深入地理解和熟练运用这些语法知识,从而编写出高效、简洁的 Python 代码
487 61
|
10月前
|
存储 开发者 Python
python基本语法
Python的基本语法简洁而强大,支持多种编程范式,包括面向对象编程和函数式编程。通过掌握变量和数据类型、操作符、控制结构、函数、类和模块等基本概念,可以有效地编写高效、可读的Python代码。无论是初学者还是经验丰富的开发者,Python都提供了丰富的工具和库来满足各种编程需求。
339 13
|
存储 Python
Python编程入门:理解基础语法与编写简单程序
本文旨在为初学者提供一个关于如何开始使用Python编程语言的指南。我们将从安装Python环境开始,逐步介绍变量、数据类型、控制结构、函数和模块等基本概念。通过实例演示和练习,读者将学会如何编写简单的Python程序,并了解如何解决常见的编程问题。文章最后将提供一些资源,以供进一步学习和实践。
222 1
|
存储 C语言 索引
Python 语法及入门 (超全超详细) 专为Python零基础 一篇博客让你完全掌握Python语法
本文全面介绍了Python的基础知识,包括Python的诞生背景、为什么学习Python、Python的应用场景、Python环境的安装、Python的基础语法、数据类型、控制流、函数以及数据容器的使用方法,旨在为Python零基础读者提供一篇全面掌握Python语法的博客。
3785 1
Python 语法及入门 (超全超详细) 专为Python零基础 一篇博客让你完全掌握Python语法
|
机器学习/深度学习 数据挖掘 开发者
Python编程入门:理解基础语法与编写第一个程序
【10月更文挑战第37天】本文旨在为初学者提供Python编程的初步了解,通过简明的语言和直观的例子,引导读者掌握Python的基础语法,并完成一个简单的程序。我们将从变量、数据类型到控制结构,逐步展开讲解,确保即使是编程新手也能轻松跟上。文章末尾附有完整代码示例,供读者参考和实践。

推荐镜像

更多